Ruby on Rails中的form_for错误消息
在Rails 4中使用form_for
显示validation错误消息的首选方法是什么?
...
与Rails 3相同 – 有关许多不同的可能性,请参阅Rails 3.0中的f.error_messages或http://railscasts.com/episodes/211-validations-in-rails-3 。
我个人的偏好是使用simple_form并将错误放在输入旁边。
这就是我为名为@location:
表单对象显示它们的@location:
<% if @location.errors.any? %> <% @location.errors.full_messages.each do |msg| %> - <%= msg %>
<% end %>
<% end %>
注意:将上面的代码放在<%= form_for @location do |f| %>
<%= 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 %> <%= pluralize(object.errors.count, "error") %> prevented the form from being saved:
<% object.errors.full_messages.each do |message| %> - <%= message %>
<% end %>
<% end %>
编辑application.html.erb文件以包含所需的错误:
<%= yield :form_errors %>
最后,将帮助器放在每个表单的开头:
<%= form_for(@model) do |f| %> <%= form_errors_for @model %> <%# ... form fields ... %> <% end %>
这使得管理和显示多种forms的表单错误非常简单。
我知道这不是所要求的,但是如果你使用的是我推荐的simple_form gem,你可以使用f.error_notification,它接受:message作为选项。
= f.error_notification message: form_errors_for(your_object)
我使用的方法与Wes的答案非常相似; application_helper.rb中的form_errors_for
def form_errors_for_base(object) if object.errors.messages[:base].present? object.errors.messages[:base].join(",\n") + "." else nil end end