個人的に苦手なdeviseを使用する際に記述するメソッドなど。備忘録として
##devise_parameter_sanitizerメソッド
private
def configure_permitted_parameters
# deviseのUserモデルにパラメーターを許可
devise_parameter_sanitizer.permit(:deviseの処理名, keys: [:許可するキー])
end
ストロングパラメーターをコントローラーに記述するが、deviseの処理を行うコントローラーはGem内に記述されているため、編集することができない。また、deviseでログイン機能を実装した場合は、paramsの他に、paramsとは異なる形のパラメーターも受け取っています。deviseのコントローラーにストロングパラメーターを反映する方法と、devise特有のパラメーターを取得する方法が、必要になります。
##devise_parameter_sanitizerメソッド
deviseのUserモデルに関わる「ログイン」「新規登録」などのリクエストからパラメーターを取得できます。
このメソッドとpermitメソッドを組み合わせることにより、deviseに定義されているストロングパラメーターに対し、自分で新しく追加したカラムも指定して含めることができます。
private
def configure_permitted_parameters # メソッド名は慣習
# deviseのUserモデルにパラメーターを許可
devise_parameter_sanitizer.permit(:deviseの処理名, keys: [:許可するキー])
end
deviseのpermitは、第一引数にdeviseの処理名、第二引数にkeysというキーに対し、配列でキーを指定することで、許可するパラメーターを追加します。
####deviseの処理名
メソッド | 用途 |
---|---|
:sign_in | ログインの処理を行うとき |
:sign_up | 新規登録の処理を行うとき |
:account_update | アカウント情報更新の処理を行うとき |
第一引数で指定した処理に対して、第二引数のkeysで指定された名前と同じキーを持つパラメーターの取得を許可します。ビューに記述した各フォーム部品のname属性値が、フォームから送信されるパラメーターのキーである。 | |
deviseにストロングパラメーターを追加するコードは、deviseのコントローラーが編集できないため、⇩こんな感じでapplication_controllerに記述。 |
class ApplicationController < ActionController::Base
before_action :configure_permitted_parameters, if: :devise_controller?
private
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:name])
end
end
"if: :devise_controller?"はもしdeviseに関するコントローラーの処理であれば、
そのときだけconfigure_permitted_parametersメソッドを実行しまうよ。という記述。
他のtweetsコントローラーなどでは処理は読み込まれても、実行まではされません。
以上備忘録。