バリデーションのエラーメッセージの個別表示


自分用です!!

バリデーションでのエラーメッセージをviewで表示していきます。

例えば、userを登録するときに、passwordとnameにpresence: trueのバリデーションをかけた、状態でパスワードとnameを空欄で登録すると、バリデーションに引っかかります。

railsのオブジェクトは、デフォルトでエラーオブジェクトを保持しているので、画像のようにエラーメッセージを取得できます。

ここでエラーメッセージが日本語化されているのは、i18nの働きによるものです。

さらに、full_messagesというメソッドを使用することで、エラーメッセージだけを取り出すことができます。

エラーメッセージは、色々な入力フォームで使いたいので、パーシャルを使います。

_error_messages.html.erb
<% if object.errors.any? %>
  <% object.errors.full_messages.each do |message| %>
    <div class="alert alert-danger"><%= message %></div>
    <% end %>
<% end %>

個別で表示したいので、each文を使用。

objectを指定して、そのobjectのエラーメッセージを表示されるようにします。

users/new.html.erb
<%= form_with model: @user, local: true do |f| %>
        <%= render 'shared/error_messages', object: f.object %>
        <div class="form-group">
          <%= f.label :first_name %>
          <%= f.text_field :first_name %>
<% end %>

このように、パーシャルを呼び出します。

object: f.objectでは、f.objectに@userが入っており、パーシャル側では、そのobjectのエラー文を表示してくれます。