#概要
Railsのmodelにバリデーションを記述すると、バリデーションチェック後に、
エラーメッセージを取得できます。
その際によく使ったコマンドを備忘録として残します。
#基本的な流れ
- インスタンスに対してメソッド*.valid?*を行う(バリデーションエラーがある場合、falseが返り値となります)
- その後、インスタンスに対してメソッド*.errors*でエラーを取得できます
#コマンド
.rb
# ユーザーインスタンスを例にとります
@user = User.new
# 単にエラーがあるかどうかの判断を行う
@user.errors.any?
-> false # エラーなし
-> true # エラーあり
@user.valid?
-> false # バリデーションに引っかかった場合
-> true # バリデーションを通過した場合
# 下記コードの結果は".valid"実行後に正しく取得できます
@user.errors # エラー情報が取得できます
@user.errors.full_messages # エラー文の全てを取得できます
@user.errors.full_messages_for(:カラム名) # 特定のカラムに対してのエラーメッセージを取得できます
#表示の具体例
.haml
// 部分テンプレート(_error-messages.html.haml)
- if user.errors.any?
- unless user.valid?
- if errors = user.errors.full_messages_for(column.to_sym)
%ul
- errors.each do |error|
%li=error
// 呼び出し
= render partial: 'error-messages', locals: {user: @user, column: "nickname"} // ニックネームのエラー文のみ表示したい場合
初回フォーム表示時に空のユーザーインスタンスが作成されていると、フォーム入力前にも関わらずエラーが出てしまいます。ですので、1行目のifで、フォーム初回表示時にはエラー文が出ないようにしています。
full_messagesでのエラー文取得は、配列型です。
それを取り出して表示することで、バリデーションエラーのメッセージをビューに表示することができます。
.to_symは文字列をシンボル型にするメソッドです。