Devise3.0.2 でRails4 対応についてREADME に少し騙された話

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 でも使用可能です。合わせて訂正いたします。

Ruby on RailsによるWEBシステム開発、Android/iPhoneアプリ開発、電子書籍配信のことならお任せください この記事を書いた人と働こう! Ruby on Rails の開発なら実績豊富なBPS

この記事の著者

shibuso

明治大学大学院理工学研究科を修了後ウェブ企業に就職。その後ソーシャルゲーム企業に転職し、後に登録会員数400万人を超えたタイトルのローンチを担当。2012年にBPSに入社。 Java, PHP, Perl, Rubyと渡り歩いて来ました。BPSに入社後RubyとRailsを使い始めましたが、今では一番好きな言語になっています。 休日の趣味はゲームと愛車のCBR250Rでのツーリングです。 たまにblog書いてます。http://www.shibuso.net

shibusoの書いた記事

週刊Railsウォッチ

インフラ

Rubyスタイルガイドを読む

BigBinary記事より

ActiveSupport探訪シリーズ