LoginSignup
11
3

More than 3 years have passed since last update.

【Rails】saveやcreateメソッドでのエラーが発生した時のエラーメッセージの出し方

Posted at

saveメソッド

irb(main):005:0> user.save
   (0.3ms)  BEGIN
  User Exists (7.7ms)  SELECT  1 AS one FROM `users` WHERE `users`.`email` IS NULL LIMIT 1
   (0.2ms)  ROLLBACK
=> false

saveのみだとfalseが返されるのみ。エラーメッセージが出てこないので、エラー原因が特定できない。そういった場合saveの後に「!」をつけるとエラーメッセージが表示される。

irb(main):006:0> user.save!
   (0.3ms)  BEGIN
  User Exists (0.4ms)  SELECT  1 AS one FROM `users` WHERE `users`.`email` IS NULL LIMIT 1
   (0.1ms)  ROLLBACK
Traceback (most recent call last):
        1: from (irb):6
ActiveRecord::RecordInvalid (バリデーションに失敗しました: パスワードは3文字以上で入力してください, メールアドレスを入力してください, 名を入力してください, 姓を入力してください)

createメソッド

saveメソッドに!マークをつけるとエラーメッセージが出てくることを書いている記事は多いが、createメソッドについても同様に!マークをつけると、エラーメッセージが出る。

irb(main):008:0> User.create
   (0.1ms)  BEGIN
  User Exists (0.3ms)  SELECT  1 AS one FROM `users` WHERE `users`.`email` IS NULL LIMIT 1
   (0.1ms)  ROLLBACK
=> #<User id: nil, email: nil, crypted_password: nil, salt: nil, created_at: nil, updated_at: nil, first_name: nil, last_name: nil>

!マークを付けた場合エラーメッセージが出てくる。

irb(main):009:0> User.create!
   (0.2ms)  BEGIN
  User Exists (0.4ms)  SELECT  1 AS one FROM `users` WHERE `users`.`email` IS NULL LIMIT 1
   (0.1ms)  ROLLBACK
Traceback (most recent call last):
        1: from (irb):9
ActiveRecord::RecordInvalid (バリデーションに失敗しました: パスワードは3文字以上で入力してください, メールアドレスを入力してください, 名を入力してください, 姓を入力してください)
11
3
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
11
3