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