Deviseで作ったUserモデルにnameカラムを追加しようとしたらstrong_parametersに阻まれた時の対処
ググって見つかった記事(Rails Deviseでサインアップ用のユーザー登録フォームに、独自の入力フィールドを追加する | EasyRamble)とかを参考にして「ああこれなら簡単そう」だと思ってたんだけど気づいたらけっこうな時間ハマってた。
原因はRails4からのstrong_parameters。
deviseで作ったユーザーモデルにnameカラムを追加しようと思って、rails g migration AddNameToUsers
とかやって、ビューにフォーム用意して、いざサインアップしようとしたら以下の様なエラー。
Processing by Devise::RegistrationsController#create as HTML Parameters: {"utf8"=>"✓", "authenticity_token"=>"xxxxxxxx", "user"=>{"name"=>"gaaamii", "email"=>"gaaamii@example.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"Sign up"} Unpermitted parameters: name
Unpermitted parametersですって。そうかそうか。勝手に追加した値を受け入れてくれるわけないっすよねー。えへへ。とはいってもdeviseが生成したコントローラ、どうやって書き換えるの...?
...と、調べてみるとdeviseのREADMEにちゃんと書いてあった。
In case you want to permit additional parameters (the lazy way™) you can do with a simple before filter in your ApplicationController.
class ApplicationController < ActionController::Base before_action :configure_permitted_parameters, if: :devise_controller? protected def configure_permitted_parameters devise_parameter_sanitizer.for(:sign_up) << :username end end