Rails 4)のform_for
を使用して検証エラーメッセージを表示するための推奨される方法は何ですか?
<%= form_for @post do |f| %>
...
<% end %>
Rails 3 (f.error_messages in Rails 3. または http://railscasts.com/episodes/211-validations-in-Rails- さまざまな可能性があります。
私の個人的な好みは、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| %>
行の後に記述してください
これを行い、コードをシンプルかつDRYに保つための私の好ましい方法は、次のとおりです。
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 gemを使用している場合は、オプションとして:messageを取る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