目的
gem "devise" ー ログイン機能の実装(その中の新規登録時)
備忘録の流れ
###### ①新規登録フォームで、<nickname・email・pass>の3項目を登録しようとした。
###### ②エラーの発生 { Field 'nickname' doesn't have a default value }
###### ③gem "devise"によるストロングパラメータの初期設定。{ email・password }のみの許可。
###### ④③について、ストロングパラメータ項目の追加を行った。
###### ⑤参考サイト (qiita記事3人程)
今回のエラー原因・結果
ActiveRecord::StatementInvalid in Devise::RegistrationsController#create
Mysql2::Error: Field 'nickname' doesn't have a default value: INSERT INTO users
(email
,encrypted_password
, created_at
, updated_at
)VALUES ( ~省略~ )
ニックネームのフィールドには"デフォルト値"が無いと言われました。
(localhost:3000の画面上でnicknameは入力している。)
原因は、gem "devise"上の機能が理由でした。
"devise"では、ストロングパラメータが初期設定されており
{ email・password }左記の2項目だけ許可されていました。
codeの追加
before_action :configure_permitted_parameters, if: :devise_controller?
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:nickname])
end
参考サイトから上記の記述2項目<before_action と def configure_ ~ end> を書き加えました。
before_action :configure_permitted_parameters, if: :devise_controller?
まずは、application_controller.rb
の上の記述からdevise_controllerのコントローラーを使用した際にbefore_actionの configure_permitted_parameters
というヘルパーメソッドが行われるみたいですね。
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:deviseの処理名, keys: [:許可するキー])
end
次に、説明されたメソッドについて、このままでは初期設定の<email・pass>についてのみ許可されている状態なので、付け加える必要があるようです。今回は、 permit(:sign_up, keys: [:nickname])
という形で設定しました。
こちらでエラー解消できました。無事、nicknameが登録されるようになりました。
解決のための参考サイト
<@neojin、@kaito121855、@ohnitakahiro>3名の方、参考にさせていただきました。ありがとうございました。
@neojin https://qiita.com/neojin/items/f03d8ebfc2e9e8a31daa
@kaito121855 https://qiita.com/kaito121855/items/e1a80da8557258c497dc
@ohnitakahiro https://qiita.com/ohnitakahiro/items/4487aed43fa264ddcdee