[Rails] 入力フォーム失敗時にエラー情報を個別表示する(f.objectを使用)

学習記録

はじめに

入力フォーム画面で処理に失敗した時に、どの項目が原因なのかメッセージが表示されるようにしましょう。

作業の流れ

  • エラーメッセージを表示するパーシャルを作成する
  • ビューファイルでエラーメッセージを表示させる

エラーメッセージを表示するパーシャルを作成する

再利用性を高めるため、汎用的なパーシャルとして作成します。

<% 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 %>

ビューファイルでエラーメッセージを表示させる

掲示版入力フォーム、ユーザ新規登録からパーシャルを呼び出します。

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

コードを紐解く

object: f.object

  • form_withやform_forなどのオプション
  • formのブロック変数に対して使用することでブロック内でモデルオブジェクトを呼び出す事ができる。
  • 同じコードを流用する際に、変数を変える必要が無くなる。
  • objectオプションでobjectにmodel(boardモデル)を渡しているということ。
  • 左のobjectは部分テンプレートのobject。
  • 右のf.objectf変数を受け渡している。

つまりf.objectは、form_withが持っている変数を使っているということです。

終わりに

f.objectの使い方が難しめでしたね。

参考記事

コメント

タイトルとURLをコピーしました