LoginSignup
3
2

More than 3 years have passed since last update.

ActiveRecord::NotNullViolation in Deviseエラー

Last updated at Posted at 2020-08-30

【概要】

1.結論

2.ActiveRecord::NotNullViolationtとは何か

3.なぜActiveRecord::NotNullViolation in Deviseになるのか

4.どのように解決するか

5.補足

1.結論

db/migrate/""""devise_create""""".rbに
記載してある"t.string password(またはpassword_confirmation)"の記載を削除する!


2.ActiveRecord::NotNullViolationtとは何か

スクリーンショット 2020-08-29 20.47.37.png

この意味は、「DBの規則上、空欄(NULL)にしてはいけない項目がデータで保存されかけましたよ!そんなことしちゃいけませんよ!」という機械からのご指摘です!


3.なぜActiveRecord::NotNullViolation in Deviseになるのか

2.と掛け合わせると、「デバイスでDBの規則上、空欄(NULL)にしてはいけない項目がデータで保存されかけましたよ!コントローラーで指示されてDBで保存して登録されかけたときだよ!」と行っています。

なぜこのようなことになるかというと、gem'devise'がわざわざpasswordを作ってくれたのに、
被せて作ろうとしているのでどっちのpasswordがいいかわからずNULLになったと思われます!

gem'devise'というものはpasswordとそれに対するpassword_confirmationを作ってくれるgemです!

なので

db/migrate/""""_devise_create_""""".rb
t.string :password null:false"(password_confirmation)

をプログラムしてカラムを作成する必要はないんです!


4.どのように解決するか

db/migrate/""""_devise_create_""""".rb
t.string password,  null:false"
(またはpassword_confirmation)

と記載されていると思うので削除しましょう!

5.補足

ちなみにgem'devise'にはpasswordに対してもう一つ付け加えれれている機能があります!

それはバリデーションです!

6文字以上にしなければ、入力ができないように制限が既に機能として備わっているので、

model/user
validates :password, length { minimum: 5 }

を記載する必要がなくなります!

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