【rails】deviceを使ったとき configure_permitted_parameters について


目的

deviceを使ったときApplicationControllerに必要な記述として下記のものがある。
ちんぷんかんぷんだったので、自分なりにまとめた。

application_controller.rb
class ApplicationController < ActionController::Base
  before_action :configure_permitted_parameters , if: :devise_controller?

  def configure_permitted_parameters
    devise_parameter_sanitizer.permit(:sign_up, keys: [:nickname, :avatar])
  end
end

1.before_action

これはコントローラーのフィルターだ。
application_controller.rbに記述することで、全てのコントローラーの実行前にアクションさせるので、ビフォーアクション。

before_action :configure_permitted_parameters , if: :devise_controller?

:devise_contoller?とはdeviseを生成した際にできるヘルパーメソッドの一つで、deviseにまつわる画面に行った時に、という意味がある。こうすることで全ての画面でconfigure_permitted_parametersが起動する。

つまりもしそれがdeviseのコントローラーだったら(devise_controller?というメソッドの返り値がtrueだったら)configure_permitted_parametersを呼ぶ。

2.configure_permitted_parameters

application_controller.rb
def configure_permitted_parameters
    devise_parameter_sanitizer.permit(:sign_up, keys: [:nickname, :avatar])
  end

ここの記述ではデバイス版のストロングパラメーターだ。
デバイスでは初期設定でメールアドレスとパスワードしか許されていない。
ここを編集することでユーザーネームなどを入れることができる。
今回の例だとnicknameとavatarカラムへの保存を許可する。

捕捉

デバイスには3っのアクションしかありません。それらの名前とデフォルトで許可されるパラメーターは次のとおりです。

・sign_in(Devise::SessionsController#create)-認証キーのみを許可します(などemail)
・sign_up(Devise::RegistrationsController#create)-認証キーに加えてpasswordおよびpassword_confirmation
・account_update(Devise::RegistrationsController#update) -認証キーを許可し、プラスpassword、password_confirmationおよびcurrent_password

これらに追加するためにapplication_controller.rbへのbefore_actionの記述が必要になってきます。

参考文献

https://github.com/heartcombo/devise
https://qiita.com/okamoto_ryo/items/52e3506e06c27631395e
https://qiita.com/yoshimitsu41/items/ba5487e18278822828a3