【概要】
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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/686400/bca5d65d-6e68-38dd-9c23-ea48913dca06.png)
この意味は、「DBの規則上、空欄(NULL)にしてはいけない項目がデータで保存されかけましたよ!そんなことしちゃいけませんよ!」という機械からのご指摘です!
3.なぜActiveRecord::NotNullViolation in Deviseになるのか ---------------------------------------- 2.と掛け合わせると、「デバイスでDBの規則上、空欄(NULL)にしてはいけない項目がデータで保存されかけましたよ!コントローラーで指示されてDBで保存して登録されかけたときだよ!」と行っています。
なぜこのようなことになるかというと、gem'devise'がわざわざpasswordを作ってくれたのに、
被せて作ろうとしているのでどっちのpasswordがいいかわからずNULLになったと思われます!
gem'devise'というものはpasswordとそれに対するpassword_confirmationを作ってくれるgemです!
なので
t.string :password null:false"(password_confirmation)
をプログラムしてカラムを作成する必要はないんです!
4.どのように解決するか ----------------------------------------
t.string password, null:false"
(またはpassword_confirmation)
と記載されていると思うので削除しましょう!
5.補足
ちなみにgem'devise'にはpasswordに対してもう一つ付け加えれれている機能があります!
それはバリデーションです!
6文字以上にしなければ、入力ができないように制限が既に機能として備わっているので、
validates :password, length { minimum: 5 }
を記載する必要がなくなります!