LoginSignup
13
17

More than 5 years have passed since last update.

Railsとdeviseで複数のモデルを管理するときのstrong parametersの設定方法

Last updated at Posted at 2016-01-23

Railsとdeviseで複数のモデルを管理するときのstrong parametersの設定方法

deviseのwikiとかにも書いてあるんだけどそれじゃ実装できなかったので、一応ここにまとめておく
deviseで扱うモデルがUserだけじゃなくて複数ある場合のstrong parametersの設定方法
この記事に1つのモデルの時と複数のモデルの時のだいたい方法書いてあるんだけど、複数のモデルのやつが本当に若干違うのでまとめておく。
まとめというか補足情報的な感じ
開発環境

ruby '2.2.0'
rails '4.2.1'
devise '3.5.1'

「独自のサニタイザーを定義する方法の部分」を変更

Devise::ParameterSanitizerを継承してサニタイザーを定義する。

変更前
class User::ParameterSanitizer < Devise::ParameterSanitizer
  def sign_in
    default_params.permit(:username, :email)
  end
end

変更後
class UserParameterSanitizer < Devise::ParameterSanitizer
  def sign_up
    default_params.permit(:name, :email, :password)
  end
end

とする。
要するに

user_parameter_sanitizer.rb
User::ParameterSanitizer
#を
UserParameterSanitizer
#にしないとエラーが出るのと、
#登録する時のメソッドを定義し直さないといけないから
sign_in
#から
sign_up
#にする。

以上。

あとはこの記事にあるように

application_controller.rb
protected

  def devise_parameter_sanitizer
    if resource_class == User
      UserParameterSanitizer.new(User, :user, params)
    else
      super # Use the default one
    end

を追加するだけ。

Sanitizerをどこに置くのが正解なのかわからなかった

Sanitizerをどこに置くのが正解なのかわかんなかったからとりあえずlib/の下に置いた。
どこに置くのが適切なのか教えて下さい。。m(_ _)m
lib以下のautoloadの仕方とか命名規則的なのはこの記事に載ってるので参考にしてくだされ。

参考記事一覧

Rails の認証プラグイン Devise での Strong Parameters について
Rails4 で lib ディレクトリの自作ライブラリを autoload
Rails 4 + Custom Devise attributes — ParameterSanitizer Error - Stackoverflow

13
17
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
13
17