こんにちは、おーしまです。
今回は、deviseについてです。
deviseとは、ユーザーを管理する際に用いると便利なRailsのGemの1つです。
ユーザーが新規登録する際にデフォルトでEmailとPasswordを登録できますが、それに加えて
ユーザーのニックネームも登録情報に追加したい
という事があります。
そういう場合は、マイグレーションファイルにニックネームカラムを追加します。
しかし、新しく作ったニックネームカラムにはストロングパラメータが設定されていません。
(元々ある、EmailとPasswordには最初からストロングパラメータが設定されている。)
そして困ったことに、deviseの処理を行うコントローラーは、Gem内にあるため、直接変更することはできず、ストロングパラメータが記述できないのです。
そこでApp/controllers/application_controller.rbに記述します。
application_controller.rbとは、全てのコントローラーに共通の記述ができるファイルです。
このファイルに記述することで、ニックネームを登録する際も、処理を読み込ませる事ができます。
そして、deviseは情報をparamsで送ってくるだけでなく
独自のパラメータも送られてくるため、
devise_parameter_sanitizerメソッドを使わなくてはいけません。
devise_parameter_sanitizerメソッドとは、簡単にいうと、deviseで用いるparamsのようなものです。
App/controllers/application_controller.rb
class ApplicationController < ActionController::Base before_action :configure_permitted_parameters, if: :devise_controller? private def configure_permitted_parameters devise_parameter_sanitizer.permit(:sign_up, keys:[nickname]) end end
if: :devise_controller? はdeviseのコントローラーの処理の時だけ
configure_permitted_parametersを実行するというものです。
devise_parameter_sanitizer.permit(:deviseの処理名, keys:[許可するキー])
deviseの処理名は、新規登録のため、sign_upとしました。
許可するキーは新しく作成した、nicknameカラムです。
ここでの、permitはdeviseのpermitメソッドのため、Railsのpermitメソッドとは異なります。
今回はここまでです。
それでは、また〜