ActiveRecord::NotNullViolation in Deviseエラー


【概要】

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とは何か

この意味は、「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 }

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