##目的
deviceを使ったときApplicationControllerに必要な記述として下記のものがある。
ちんぷんかんぷんだったので、自分なりにまとめた。
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
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