web-dev-qa-db-ja.com

Ruby on Rails

Rails 4)のform_forを使用して検証エラーメッセージを表示するための推奨される方法は何ですか?

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

Rails 3 (f.error_messages in Rails 3. または http://railscasts.com/episodes/211-validations-in-Rails- さまざまな可能性があります。

私の個人的な好みは、simple_formを使用して、入力の横にエラーを配置することです。

8
Jesse Wolgamott

これが、@location:というフォームオブジェクトに表示する方法です。

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

注:上記のコードは<%= form_for @location do |f| %>行の後に記述してください

30
Danny

これを行い、コードをシンプルかつ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 %>

これにより、非常に管理が簡単になり、多くのフォームにわたるフォームエラーを表示できます。

12
Wes Foster

私はこれが正確に尋ねられたものではないことを知っていますが、お勧めする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
0
jlesse