【rails6.1】エラーメッセージを今までよりも簡単に取り出してみよう

今回のブログは、rails6.1に追加されたエラーメッセージの表示についてです。

今までよりも少し便利に表示できるようになったので紹介です。

versions
  • ruby 2.6.5
  • rails 6.1.1

準備をしよう

まずはいつも通り準備をしていきます。

今回は暇つぶしにクローンサイトを作成しているので、ユーザー管理機能で行っていきます。

~$ rails new book-management
~$ cd book-management
book-management$ rails db:create

続いてdeviseを導入していきます。

gem 'devise'

ターミナルに戻って、bundle installをします。

book-management$ rails g devise:install
book-management$ rails g devise user

これで準備は完了です。

バリデーションエラーを発生させよう

ここからは簡易的に、バリデーションエラーをみていきます。

rails cを起動してください。

[1] pry(main)> @user = User.new
=> #<User id: nil, email: "", created_at: nil, updated_at: nil>
[2] pry(main)> @user.save
=> false
[3] pry(main)> @user.errors
=> #<ActiveModel::Errors:0x00007f8ebfbe9768
 @base=#<User id: nil, email: "", created_at: nil, updated_at: nil>,
 @errors=
  [#<ActiveModel::Error attribute=email, type=blank, options={:if=>:email_required?}>,
   #<ActiveModel::Error attribute=password, type=blank, options={:if=>:password_required?}>,
   #<ActiveModel::Error attribute=password, type=invalid, options={:value=>nil}>]>

ここからが新しい箇所です。

[4] pry(main)> @user.errors.where(:email, :blank).first.message
=> "can't be blank"
[5] pry(main)> @user.errors.where(:email, :blank).first.full_message
=> "Email can't be blank"

errorsに対して、whereメソッドが使用できるようになっています。

まとめ

  • errorsに対してwhereメソッドが使用できるようになった