はじめに
入力フォーム画面で処理に失敗した時に、どの項目が原因なのかメッセージが表示されるようにしましょう。
作業の流れ
- エラーメッセージを表示するパーシャルを作成する
- ビューファイルでエラーメッセージを表示させる
エラーメッセージを表示するパーシャルを作成する
再利用性を高めるため、汎用的なパーシャルとして作成します。
<% 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.object
はf
に変数
を受け渡している。
つまりf.object
は、form_with
が持っている変数
を使っているということです。
終わりに
f.objectの使い方が難しめでしたね。
コメント