Form_for сообщений об ошибках в Ruby on Rails

Каков предпочтительный способ отображения сообщений об ошибках проверки с помощью form_for в Rails 4?

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

Ответ 2

Вот как я показываю их для моего объекта формы с именем @location:

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

Примечание: поставьте вышеуказанный код после строки <%= form_for @location do |f| %>

Ответ 3

Мой предпочтительный способ сделать это и сохранить код простым и сухим, выглядит следующим образом:

Создайте новый помощник внутри 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 %>

Это упрощает управление и отображение ошибок формы во многих формах.

Ответ 4

Я знаю, что это не совсем то, что было задано, но если вы используете камень simple_form, который я рекомендую, вы можете использовать f.error_notification, который принимает: сообщение как вариант.

= f.error_notification message: form_errors_for(your_object)

Я использую метод, очень похожий на ответ Уэса; 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