Rails フォーム入力時エラー情報を個別表示(f. objectについて)

前提

  • エラーメッセージ表示部分をformのテンプレートに記載せず、専用のパーシャルが作られていること。
  • この際、特定のモデルに依存せず汎用的なつくりにする必要がある。格納場所はshared配下にすること。
  • エラーメッセージの表示方法はアプリケーションごとに異なるため、エラーメッセージを直接生成するようなビューヘルパーはRailsに含まれてない。 表示が必要な場合はパーシャル化して、汎用的に使えるようにする。

実装例

#パーシャル 
#shared/_error_messages.html.erb

<% if object.errors.any? %>
  <div class="alert alert-danger">
    <ul class="mb-0">
      <% object.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
    </ul>
  </div>
<% end %>
#パーシャル 呼び出し
#app/views/boards/_form.html.erb

<%= form_with model: board, local: true do |f| %>
  <%= render 'shared/error_messages', object: f.object %>※
  <div class="form-group">
    <%= f.label :title %>

※ f . object

  • f.objectのobjectは、form_withやform_forなどのオプション
  • formのブロック変数に対して使用する事でブロック内でモデルオブジェクトを呼び出す事が出来る。
  • 同じコードを流用する際に、変数を変える必要が無くなる

参考サイト

qiita.com

qiita.com

www.ryotaku.com