#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文字以上で入力してください, メールアドレスを入力してください, 名を入力してください, 姓を入力してください)