32
29

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Railsのバリデーションエラーメッセージの取得

Posted at

#概要
Railsのmodelにバリデーションを記述すると、バリデーションチェック後に、
エラーメッセージを取得できます。

その際によく使ったコマンドを備忘録として残します。

#基本的な流れ

  1. インスタンスに対してメソッド*.valid?*を行う(バリデーションエラーがある場合、falseが返り値となります)
  2. その後、インスタンスに対してメソッド*.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は文字列をシンボル型にするメソッドです。

32
29
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
32
29

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?