2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ユーザー新規登録時に、ActiveRecord::NotNullViolation というエラーが出たのとそれに対処した話。

Last updated at Posted at 2020-11-07

ユーザー新規登録におけるエラー

ユーザー管理機能を実装中に下記のエラーが出ました。
151aa02ffd6f364ebe9ba332e3ba4fde.png

白抜きのエラーについて

ActiveRecord::NotNullViolation in Devise::RegistrationsController#create

参考のサイトで調べてみると

「このエラーはDB制約上、NULL にしてはいけない項目が NULL のまま保存が実行されたことによるエラー」

とありました。

確認したこと

①マイグレーションファイル

上記の画像エラー文に

Mysql2::Error: Field 'prefecture_address' doesn't have a default value

とあったため、これを確認するためにマイグレーションファイルを確認しました。
画像をご覧ください。
2d3be4158c0f509fdaaba70a1ae46896.png

マイグレーションファイルでそのように設定しているのでここは特に問題なさそうです。

②コントローラー

マイグレーションファイルで設定しているのなら、受け手が受けてないのではないかと思い、次はコントローラーを確認します。
controller.png
こちらもマイグレーションファイルで指定した通りのカラム名になっていました。

③ビュー

マイグレーション、コントローラーできたのでビューを確認してみようかなとなりました。(ここで若干焦り出します。)
ビューの画像が下記の通りです。5bf9c8d818125e51fd7a384acda259f7.png
わかりましたでしょうか…
マイグレーションファイル、コントローラーではprefecture_addressとなっていたのが、ビューファイルではprefecuture_addressとなっていたのです。

コードの修正

ビューの修正を終えて新規登録を行ったところ無事登録ができておりました。

最後に

基本的にエラーが出たときにNoRouteMatches程度で焦る筆者(一応NoRouteMatchesは克服したつもり)ですので、今までみたことのないエラーが出たときは「ああ…終わった…」と思いました。今回の場合sourceのコードがどこのファイルのことを指しているのかがわからなかったので焦りようは半端なかったです。

エラーを調べてみて、サイトでヒットしたのは幸運でした。
これを機会にエラー耐性をつけていこうと思います。
失礼します。

参考文献

【teratail】
devise機能を導入してログイン・新規作成時のエラー
https://teratail.com/questions/235508

2
0
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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?