プログラミング

RailsのDeviseモデルでrollback transactionエラー

Ruby on Rails 5のDeviseモデルでrollback transactionエラーが起こる場合の対処についてメモです。

こんなエラーが。

irb(main):006:0> User.create(username: 'yuis')
   (0.0ms)  begin transaction
   (0.0ms)  rollback transaction
=> #<User id: nil, email: "", created_at: nil, updated_at: nil, provider: nil, uid: nil, username: "yuis", disc: nil>

原因:deviseが内部でメールアドレスとパスワードが必須で、それらが欠けているとエラーを吐き出すようになっているが、そのエラーもあくまでControllerあってのエラーなので、エラーが出力されない。
データベースでも二重にバリデーション/制約をかけていれば気づくかもしれないが、そうじゃない場合は気づきにくい。

解決:メアドとパスワードもちゃんと入力する

irb(main):005:0> User.create(username: 'yuis' , email: 'example@gmail.com' , password: "hogehoge" )
...
=> #<User id: 9, email: "example@gmail.com", created_at: "2018-07-06 20:51:19", updated_at: "2018-07-06 20:51:19", provider: nil, uid: nil, username: "yuis", disc: nil>

メールアドレスのバリデーション正規表現パターンが間違っている、という可能性もあるみたいですが、
実際はこちらの可能性のほうが高いかと思います。

Rollback Transaction Error – Rails – Stack Overflow

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です