rails永遠の初心者の備忘録

物忘れの激しい経営者による備忘録

Rails4+devise 複数のdeviseモデル対応

今日からメモ的に残していきます。rails3のプロジェクトをrails4に変更している中で、devise対応で手間取ったのでそのメモになります。

Rails の認証プラグイン Devise での Strong Parameters について | EasyRamble

今回はこちらのブログを主に参考にさせてもらいました。

目次

Userモデルに加えて、Editorモデルも作りたい場合の対応についてのメモです。

複数viewの対応(config.scoped_views = true)

複数モデルのStrongParameters対応

複数viewの対応(config.scoped_views = true)

deviseで複数viewを有効にするには、下記を追加。これをやらないでおくと、例えばEditorモデルのconfirmationメールを送って欲しいのにも関わらず、デフォルトの/devise/mailer/confirmation_instructions.html.erbが送られてしまったりして厄介。

/config/initializer/devise.rb

config.scoped_views = true

複数モデルのStrongParameters対応

これに結構はまりました。rails4からStrongParametersというものが導入され、modelとcontrollerの記述が大きく変わっています。deviseでは若干やっかいな対応が必要で、冒頭の方のブログを読ませてもらい、ドキュメントを見ながら対応しました。

plataformatec/devise · GitHub

ドキュメントと冒頭のブログを読むと、下記のコードを追記すればいいっぽいのですが、どこに書けばいいのかわからず、右往左往。

class User::ParameterSanitizer < Devise::ParameterSanitizer
  def sign_in
    default_params.permit(:username, :email) #追加したいパラメータ
  end
end

githubで検索すると/libの直下にuser_sanitizer.rbとして保存しているアプリが多いのですが、やってみてもうまくいきませんでした。(深く調べてません。。。)ということで、よくわからないけど、/model/user.rbの下に下記のような形で追記したらうまく動いたのでよしとしました。

/app/models/user

class User < ActiveRecord::Base
  #様々なコード
end

class User::ParameterSanitizer < Devise::ParameterSanitizer
  def sign_in
    default_params.permit(:username, :email) #追加したいパラメータ
  end
end

まとめと反省

sanitizerについてはどうなっているのかよく調べておきたいところ。なぜ他のアプリでは/lib直下に置いているのか、なぜこちらの環境では動かなかったのか、この二点についてはわかり次第、追記したいと思います。(教えてくれる人も歓迎です。)