概要
Railsのmodelにバリデーションを記述すると、バリデーションチェック後に、エラーメッセージを取得できます。
その際によく使ったコマンドを備忘録として残します。
基本的な流れ
コマンド
# ユーザーインスタンスを例にとります @user = User.new # 単にエラーがあるかどうかの判断を行う @user.errors.any? -> false # エラーなし -> true # エラーあり @user.valid? -> false # バリデーションに引っかかった場合 -> true # バリデーションを通過した場合 # 下記コードの結果は".valid"実行後に正しく取得できます @user.errors # エラー情報が取得できます @user.errors.full_messages # エラー文の全てを取得できます @user.errors.full_messages_for(:カラム名) # 特定のカラムに対してのエラーメッセージを取得できます
表示の具体例
// 部分テンプレート(_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は文字列をシンボル型にするメソッドです。