Ruby on Rails中的form_for错误消息

时间:2013-07-15 19:18:26

标签: ruby-on-rails ruby ruby-on-rails-4

在Rails 4中使用form_for显示验证错误消息的首选方法是什么?

<%= form_for @post do |f| %>
  ...
<% end %>

4 个答案:

答案 0 :(得分:30)

这就是我为名为@location:

的表单对象显示它们的方法
<% if @location.errors.any? %>
<ul>
  <% @location.errors.full_messages.each do |msg| %>
    <li><%= msg %></li>
  <% end %>
</ul>
<% end %>

注意:将上述代码放在<%= form_for @location do |f| %>

之后

答案 1 :(得分:12)

我这样做的首选方法是保持代码简单和干燥,如下所示:

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 %>

这使得极其易于管理并在多种表单中显示您的表单错误。

答案 2 :(得分:8)

与Rails 3相同 - 有许多不同的可能性,请参阅f.error_messages in Rails 3.0http://railscasts.com/episodes/211-validations-in-rails-3

我个人的偏好是使用simple_form并将错误放在输入旁边。

答案 3 :(得分:0)

我知道这并不是所要求的,但是如果您使用的是我推荐的simple_form gem,您可以使用f.error_notification,其中包含:message作为选项。

= f.error_notification message: form_errors_for(your_object)

我使用的方法与Wes的答案非常相似; form_errors_for在 application_helper.rb

def form_errors_for_base(object)
  if object.errors.messages[:base].present?
    object.errors.messages[:base].join(",\n") + "."
  else
    nil
  end
end