我是rails的新手并尝试设置我的第一个嵌入式表单.表单本身可以工作,但我无法确定如何将验证错误消息发送到视图.我假设f.object.errors会提供访问权限,但是当说该方法存在时,f.object.errors.count总是返回0,而f.object.errors.any?返回false.除了没有显示实际的错误消息之外,表单按预期工作 - 即,未能插入无效数据并返回到验证失败的表单.下面列出的型号,控制器和视图 - 任何帮助非常感谢.
...
<!-- Form embedded in boards/show.html.erb -->
<%= form_for([@board, @board.boardthreads.build]) do |f| %>
<div class="field">
<%= f.label :title %><br />
<%= f.text_field :title %>
</div>
<div class="field">
<div class="actions"> <%= f.submit %> </div>
</div>
<% end %>
...
class Boardthread < ActiveRecord::Base
belongs_to :user
belongs_to :board
validates :user, :presence => true
validates :board, :presence => true
validates :title, :presence => true
end
class BoardthreadsController < ApplicationController
def create
@board = Board.find(params[:board_id])
@boardthread = @board.boardthreads.new(params[:boardthread])
@boardthread.user = current_user
@boardthread.save
redirect_to board_path(@board)
end
end
Run Code Online (Sandbox Code Playgroud)
shi*_*ara 21
这是因为当你失败时,你再次在embedded_form中构建一个对象.您需要在表单中使用失败的对象.
在新操作中,您需要构建对象并在embedded_form上使用它.在创建过程中,您可以使用它,因为它已经定义了
<%= form_for([@board, @boardthread]) do |f| %>
<% @boardthread.errors.full_messages.each do |msg| %>
<p><%= msg %></p>
<% end %>
<div class="field">
<%= f.label :title %><br />
<%= f.text_field :title %>
</div>
<div class="field">
<div class="actions"> <%= f.submit %> </div>
</div>
<% end %>
Run Code Online (Sandbox Code Playgroud)
除了shingara回答:你可能还需要添加代码来显示表单中的错误,有些像
<ul>
<%- @boardthread.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<%- end %>
</ul>`
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22920 次 |
| 最近记录: |