Rails4からMass Assignment対策として、StrongParametersがRailsの中の標準ライブラリと組み込まれるようになりました。
Deviceを使ってユーザ認証を導入、独自フィールドを設置したのですが、StrongParametersでそのフィールドを許可の対象にしないとUnpermitted parametersとしてエラーがでます。
せっかく調べたので、その設定をメモしておきたいと思います。
やったこと
今回の環境
– Rails 4.2.1
– Devise 3.2.1
こういう時はドキュメントを読むのが一番ですね。しっかりStrongParametersについて書いてありますね。
http://www.rubydoc.info/github/plataformatec/devise/master/frames#Strong_Parameters
まずこの3つのアクションがあることを理解しておきます。
- sign_in (Devise::SessionsController#create) – Permits only the authentication keys (like email)
- sign_up (Devise::RegistrationsController#create) – Permits authentication keys plus password and password_confirmation
- account_update (Devise::RegistrationsController#update) – Permits authentication keys plus password, password_confirmation and current_password
その後は各種アクションに対して、どのパラメータを許可するかを追加します。
ApplicationControllerに書くのもいいかもしれませんが、将来の拡張性などを考えるとモデルに対してコントローラーを作るのが汎用性が高そうです。
registrations_controllerをUsersフォルダ内に作成しました。
1 2 3 4 5 6 7 8 9 10 11 12 |
# app/controllers/users/registrations_controller.rb class Users::RegistrationsController < Devise::RegistrationsController before_filter :configure_permitted_parameters protected def configure_permitted_parameters devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:first_name, :last_name) } devise_parameter_sanitizer.for(:sign_in) { |u| u.permit(:first_name, :last_name) } devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:first_name, :last_name) } end end |
routes.rbに明示的にコントローラーを指定する
1 |
devise_for :users, :controllers => { :registrations => "users/registrations" } |
以上で追加したフィールドに情報を追加できるようになりました。
No Comments, Comment or Ping
Reply to “Rails 4.2 & Deviseの環境下でStrong_ParametersによるUnpermitted parametersエラー”
Warning: Undefined variable $user_ID in /home/sazaeau/mizoshiri.com/public_html/blog.mizoshiri.com/wp-content/themes/grid_focus_public_mizo/comments.php on line 66
You must be logged in to post a comment.