Rails で認証系のGem で人気があるものといえばDevise かと思うのですが、Rails4 対応で少しはまったのでメモ。なお予め断っておきますと、これは2013年8月28日現在での問題であり今後すぐに問題なくなるかと思います。
Rails4 からStrongParameters が導入されましたが、Devise も同じくStrongParametersへの対応が図られています。例えばusers テーブルを作ったとして、そこにDevise が必須としている以外のカラムを追加したいと思った場合、今まではモデルにattr_accessible
を書いていたかと思いますが、今後StrongParametersでそのカラムを指定してやる必要があります。
このことについてはDevise のREADME の該当箇所にも書かれています。ここの解説によると「devise_parameter_sanitizer.for」を使え、とあります。
これは楽だなと思っていたのですが、しかし動かそうとしてみると何故かNoMethodError が。
少し探してみるとIssue にこのようなものが。devise_parameter_sanitizer.for(:sign_up) << :something raises an error
え?RC 版でしかリリースしてないんですか?(´・ω・`; (注:現在正式版は3.0.2 が最新)
というわけで、上記メソッドを使いたくてもRC 版を使いたくない方は正式版がリリースされるまでもう少し待つ必要がある模様です。README にはもう書かれているのに…。
追記
3.0.2 のREADME はIssue で指摘を受けた後に訂正されていました。
また、正確にはdevise_parameter_sanitizer.for() <<
が未対応です。
devise_parameter_sanitizer.for() {}
については3.0.2 でも使用可能です。合わせて訂正いたします。