フォームの入力に失敗したとき、エラーメッセージを表示する。
- フラッシュメッセージのようなエラーメッセージを表示したい
- 前提
- エラーメッセージを表示するパーシャルを作成する
- つくったエラーメッセージ用のパーシャルをビュー側で読み込めるようにする。
- f.objectって??
フラッシュメッセージのようなエラーメッセージを表示したい
新規ユーザー登録に失敗したときや、掲示板投稿に失敗したときに理由を表示させたい。
各モデルにバリデーションを設定しているので、保存エラーが起こったときに、エラーメッセージをビューでも表示するように実装する。
Active Record バリデーション - Railsガイド
前提
すでに、UserとBoardモデルには、こんな感じでバリデーションを設定している
class Board < ApplicationRecord belongs_to :user validates :title, presence: true, length: { maximum: 255 } validates :body, presence: true, length: { maximum: 65_535 } end
エラーメッセージを表示するパーシャルを作成する
汎用的なつくりにするので、パーシャルを作成する
ファイルはshared配下にする
BootStrap使い方メモ
まだまだ使いこなせていないのですが、classを指定することによってBootstrapがCSSも綺麗に整えてくれる
ここの部分は、margin-bottom : 0 ; ってこと エラーメッセージ下の余白が綺麗になくなりました。
<ul class="mb-0">
フラッシュメッセージみたいにするにはこれ
class="alert alert-danger"
つくったエラーメッセージ用のパーシャルをビュー側で読み込めるようにする。
<%= form_with(model:board, local: true) do |f| %> <%= render 'shared/error_messages', object: f.object %> <div class="form-group"> ・ ・
ユーザー登録フォームも同様
f.objectって??
f.objectとするとそのフォーム(ここではboard)を作るときに参照データを引っ張ってくれる
object: f.object
左のobject(名前は何でもいい。hogeでも可)は、パーシャル内で使う変数"object"を定義している
つまり、パーシャルで使う変数"object"は、boardを作るときに参照したデータが入る
object: @userやboardでも動くけど、他のページに同じコードを入れたとき、その変数を使えるかどうかは異なる。
f.objectならどのページでも使える。