[Rails] Devise (2.0.4)でDEPRECATION WARNINGが発生

警告ネタが続きますが、どこかの誰かの役に立つかもとしれないということで。

Railsに便利な認証機能を追加してくれるプラグイン「Devise」を使っていたら「DEPRECATION WARNING」が発生したので、その時の対応についてメモ。

当方の環境はRails 3.2.1 + Devise 2.0.4。

以下が発生した警告。

警告の内容は「devise_forメソッドにブロックを渡すのは非推奨になりました。devise_forメソッドからブロックを取りのぞいて、そのブロックをdevise_scopeメソッドに渡してください。」とのこと。

routes.rbに警告されているであろうコードを発見。

これを以下のように書き換えることで警告が表示されなくなりました。

警告メッセージがかなり丁寧に表示されていたので、迷うことなく警告を消し去ることができました。
めでたしめでたし。

  • masutaka

    devise_scope :users do
    これ、正しくは
    devise_scope :user do
    だと思います。(WARNINGもよく見ると単数形。)
    devise_forは複数形が正しいようです。

    routingのテストは通りますが、以下のエラーが発生してfeatureのテストが通らないことがあります。単数形なら問題ありません。

    This may happen for two reasons:

    1) You forgot to wrap your route inside the scope block. For example:

    devise_scope :user do
    match “/some/route” => “some_devise_controller”
    end

    2) You are testing a Devise controller bypassing the router.
    If so, you can explicitly tell Devise which mapping to use:

    @request.env[“devise.mapping”] = Devise.mappings[:user]

    https://github.com/plataformatec/devise/wiki/How-To:-Change-the-default-sign_in-and-sign_out-routes
    https://github.com/plataformatec/devise/issues/1615#issuecomment-8074778