deviseとactiveadminでログイン後の遷移先で詰まった

環境

  • devise (2.1.2)
  • rails (3.2.6)
  • ruby 1.9.3p194
  • activeadmin (0.5.1)

activeadminは、deviseを使ってるので遷移先を定義してるメソッドも同じのを見てる。
deviseまたはactiveadminでログイン後の遷移先を任意の場所をするには、以下のように
applicationコントローラーにafter_sign_in_path_forメソッドを定義すればよい。

 class ApplicationController < ActionController::Base
  def after_sign_in_path_for
    mypage_path
  end
end

でもこれだと、一般ユーザがログインする時はマイページに遷移はするけど、activeadminからはdashboardに遷移しない。全部マイページに行く。

ちなみに、deviseの記事を見ているとどの記事もafter_sign_in_path_forメソッドにパスをべたっと貼って終わっている。
activeadminを使うことを想定していない感じだ。

deviseのソースを見るとそれっぽいコードがあったので修正し、以下のようにすると要望通りの動きになった。

#devise-2.1.2/lib devise/controllers/helpers.rb
def after_sign_in_path_for(resource)
  stored_location_for(resource) ||
    if resource.is_a?(User)
      mypage_path
    else
      super
    end
end

stored_location_forメソッドってなんなんだろう。。
http://rubydoc.info/github/plataformatec/devise/master/Devise/Controllers/Helpers:stored_location_for