15

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

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

4 回答 4

34

这就是我为我的表单对象显示它们的方式@location:

<% if @location.errors.any? %>
<ul>
  <% @location.errors.full_messages.each do |msg| %>
    <li><%= msg %></li>
  <% end %>
</ul>
<% end %>

注意:将上面的代码放在<%= form_for @location do |f| %>行后

于 2013-11-02T23:42:36.253 回答
14

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

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

这使得在许多表单中管理和显示表单错误变得非常简单。

于 2015-10-09T22:56:20.220 回答
9

与 Rails 3 相同 - 请参阅Rails 3.0 中的 f.error_messageshttp://railscasts.com/episodes/211-validations-in-rails-3以了解许多不同的可能性。

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

于 2013-07-15T20:41:32.133 回答
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
于 2016-05-20T14:25:55.550 回答