おーしまブログ

プログラミングやってます

<Ruby on Rails> deviseを用いてカラムを追加した時のコントローラー修正

こんにちは、おーしまです。

今回は、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メソッドとは異なります。


今回はここまでです。
それでは、また〜

ここはどこ おれはだれ それに近いものがあんだよ 始めようとした奴らも迷い始めてる 怖がらせないでよ そりゃ甘くはないけど まだまだ 夢見ていい世界なんでしょ {UVERwould「ハイ!問題作」}