こんにちは。たなか(@tanaka_ricecake)です。
Ruby on RailsでWebアプリケーションサービスの開発をしています。
特定の条件でバリデーションをかけ、エラーメッセージを表示する方法について備忘録を残しておこうと思います。
もくじ
errors.addでエラーメッセージを表示する方法
やりたいこと
入退館を管理する機能を作成する。
新規作成フォームから顧客のIDを入力できるが、この時『存在しない顧客ID』を入力した場合にバリデーションが走りエラーメッセージを表示するようにしたい。
errors.addでエラーメッセージを表示する
入退館モデル(access_management.rb)に以下を追記します。
オリジナルのバリデーションを追加
validate :exists_user_id
バリデーションの内容を編集
def exists_user_id
errors.add('user_id', 'の値が不正です') if User.find_by(id: self[:user_id]).blank?
end
存在しないIDを入力した際に、上記のバリデーションが走るようになりました!やったぜ!
errors[:base]ってのもある
類似機能でerrors[:base]を使った書き方もできます。
上記の例だと以下のように記述します。
def exists_user_id
errors[:base] << "入退館管理の作成に失敗しました!" if User.find_by(id: self[:user_id]).blank?
end
Railsガイドに以下の文章があります。
record.errors[:base]
には、特定の属性よりもそのレコード全体の状態に関連するエラーメッセージを追加するのが普通です。
特定の属性を指定するような際は先のerrors.addを使うのがスタンダードみたいですね。
まとめ
今回はRuby on Railsでerrors.addを使ったエラーメッセージを表示する方法についてご紹介しました。
注意点としてモデルの関連付けが必要です。うまくいかなかった方はアソシエーションを一度確認してみてください。
短いですが、今回はここまで。