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