1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

deviseでストロングパラメーターを使えるようにする

Last updated at Posted at 2020-11-08

個人的に苦手な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コントローラーなどでは処理は読み込まれても、実行まではされません。

以上備忘録。

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?