【devise】devise_parameter_sanitizerメソッド

deviseにおけるparamsのようなメソッド。deviseUserモデルに関わる「ログイン」「新規登録」などのリクエストからパラメーターを取得できる。

 

・このメソッドとpermitメソッドを組み合わせることにより、deviseに定義されているストロングパラメーターに対し、自分で新しく追加したカラムも指定して含めることができる。

 

・devise_parameter_sanitizerメソッドは、これまでのストロングパラメーターと同じく、新たに定義するプライベートメソッドの中で使用する。

deviseの提供元では、新たに定義するメソッド名をconfigure_permitted_parametersと紹介していることから、慣習的にこのメソッド名で定義することが多い。

 

◯定義方法

private

def configure_permitted_parameters  # メソッド名は慣習

  # deviseのUserモデルにパラメーターを許可

  devise_parameter_sanitizer.permit(:deviseの処理名, keys: [:許可するキー])

end

 

・また、devise_parameter_sanitizerに使用するpermitメソッドの引数がこれまでと異なる点に注目。これは、deviseに定義されているpermitメソッドであり、Railsではじめから使用できたpermitメソッドとは異なるものであるためである。

 

◯permitメソッドとの違い

# paramsのpermitメソッド

params.require(:モデル名).permit(:許可するキー)

 

# devise_parameter_sanitizerのpermitメソッド

devise_parameter_sanitizer.permit(:deviseの処理名, keys: [:許可するキー])

 

◯使用例

class ApplicationController < ActionController::Base

  before_action :authenticate_user!

  before_action :configure_permitted_parameters, if: :devise_controller?

 

  private

  def configure_permitted_parameters

    devise_parameter_sanitizer.permit(:sign_up, keys: [:name])

  end

end

 

このbefore_actionのifというオプションを使用している点に注目。

これは、値にメソッド名を指定することで、その戻り値がtrueであったときにのみ処理を実行するよう設定するもの。

 

今回は:devise_controller?というdeviseのヘルパーメソッド名を指定して、もしdeviseに関するコントローラーの処理であれば、そのときだけconfigure_permitted_parametersメソッドを実行するように設定している。他のtweetsコントローラーなどでは処理は読み込まれても、実行まではされない。