【发布时间】:2013-07-15 19:18:26
【问题描述】:
在 Rails 4 中使用 form_for 显示验证错误消息的首选方式是什么?
<%= form_for @post do |f| %>
...
<% end %>
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-4
在 Rails 4 中使用 form_for 显示验证错误消息的首选方式是什么?
<%= form_for @post do |f| %>
...
<% end %>
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-4
这就是我为名为@987654321@ 的表单对象显示它们的方式
<% if @location.errors.any? %>
<ul>
<% @location.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
<% end %>
注意:将上面的代码放在<%= form_for @location do |f| %>这一行之后
【讨论】:
我更喜欢这样做并保持代码简单和干燥的方式如下:
在 application_helper.rb
中创建一个新的助手# Displays object errors
def form_errors_for(object=nil)
render('shared/form_errors', object: object) unless object.blank?
end
在 shared/_form_errors.html.erb
中创建一个新的共享部分<% content_for :form_errors do %>
<p>
<%= pluralize(object.errors.count, "error") %> prevented the form from being saved:
</p>
<ul>
<% object.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
<% end %>
编辑您的 application.html.erb 文件以在您想要的位置包含错误:
<%= yield :form_errors %>
最后,将助手放在每个表单的开头:
<%= form_for(@model) do |f| %>
<%= form_errors_for @model %>
<%# ... form fields ... %>
<% end %>
这使得管理和跨多个表单显示表单错误非常简单。
【讨论】:
与 Rails 3 相同 -- 请参阅 f.error_messages in Rails 3.0 或 http://railscasts.com/episodes/211-validations-in-rails-3 了解许多不同的可能性。
我个人的偏好是使用 simple_form 并将错误放在输入旁边。
【讨论】:
我知道这不是所要求的,但如果您使用的是我推荐的 simple_form gem,您可以使用 f.error_notification,它采用 :message 作为选项。
= f.error_notification message: form_errors_for(your_object)
我使用的方法与 Wes 的答案非常相似; application_helper.rb
内的 form_errors_fordef form_errors_for_base(object)
if object.errors.messages[:base].present?
object.errors.messages[:base].join(",\n") + "."
else
nil
end
end
【讨论】: