【Rails】errors.addでエラーメッセージを表示する方法

ruby-on-rails

こんにちは。たなか(@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

今回はRuby on Railsでerrors.addを使ったエラーメッセージを表示する方法についてご紹介しました。

注意点としてモデルの関連付けが必要です。うまくいかなかった方はアソシエーションを一度確認してみてください。

短いですが、今回はここまで。

参考サイト

コメントを残す

メールアドレスが公開されることはありません。