devise_parameter_sanitizerとは?
devise(Gem)のUserモデルに関わる「ログイン」「新規登録」などのリクエストからパラメーターを取得できるようになるメソッド。
また、新しく追加したカラムをdeviseに定義されているストロングパラメーターに含めたい場合は、permitメソッドを用いることで含めることができる。
さらに、deviseに関するストロングパラメーターを記述する際は、application_controller.rbに記述する。(deviseの処理を行うコントローラーはGem内に記述されており編集できないため。)
使用方法
####① privateにdeviseに関するストロングパラメーターの記述する。
private
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:deviseの処理名, keys: [:許可するキー])
end
第一引数の処理名には、それぞれサインイン時やサインアップ時、アカウント情報更新時の処理を記述する。
deviseの処理名 | 役割 |
---|---|
:sign_in | ログインの処理を行う時 |
:sign_up | 新規登録の処理を行う時 |
:account_update | アカウント情報更新の処理を行う時 |
例)新規登録時に名前(name)を許可する記述
private
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:name])
end
####② before_actionを用いてメソッドを呼び出す。
before_action :configure_permitted_parameters, if: :devise_controller?
private
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:deviseの処理名, keys: [:許可するキー])
end
「if:」
before_actionのオプションの一つで、値にメソッド名を指定することで、その戻り値がtrueであるときのみ処理を実行するように設定できる。
今回の場合は、「:devise_controller?」というdeviseのヘルパーメソッド名を指定して、deviseに関するコントローラーの処理であればその時だけ実行されるように設定している。