Каков предпочтительный способ отображения сообщений об ошибках проверки с помощью form_for
в Rails 4?
<%= form_for @post do |f| %>
...
<% end %>
Каков предпочтительный способ отображения сообщений об ошибках проверки с помощью form_for
в Rails 4?
<%= form_for @post do |f| %>
...
<% end %>
То же, что и Rails 3 - см. f.error_messages в Rails 3.0 или http://railscasts.com/episodes/211-validations-in-rails-3 для различных возможностей.
Мое личное предпочтение - использовать simple_form и поставить его рядом со входом.
Вот как я показываю их для моего объекта формы с именем @location:
<% if @location.errors.any? %>
<ul>
<% @location.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
<% end %>
Примечание: поставьте вышеуказанный код после строки <%= 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 %>
<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 %>
Это упрощает управление и отображение ошибок формы во многих формах.
Я знаю, что это не совсем то, что было задано, но если вы используете камень 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