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では若干やっかいな対応が必要で、冒頭の方のブログを読ませてもらい、ドキュメントを見ながら対応しました。
ドキュメントと冒頭のブログを読むと、下記のコードを追記すればいいっぽいのですが、どこに書けばいいのかわからず、右往左往。
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直下に置いているのか、なぜこちらの環境では動かなかったのか、この二点についてはわかり次第、追記したいと思います。(教えてくれる人も歓迎です。)