2012-03-28 9 views
0

私は私のレールアプリでユーザー認証のためにDeviseを使用しています。ユーザーがリーグのメンバーであるかどうかを確認する設定があります。彼がただ1リーグのメンバーであれば、彼はいくつかのリーグを持っていればuser_leagueページにリダイレクトされ、リーグインデックスに指揮され、彼らは自分が管理したいリーグを選ぶことができます。 「after_sign_in_path_for」メソッドは、私は、デフォルトの使用によって、あまりにも認証のために考案レール管理宝石「アクティブ管理者」を設置し、この私のアプリでafter_sign_in_path_for(devise)が有効になったときにActive Adminがサインインする際に問題が発生しました

def after_sign_in_path_for(resource_or_scope) 
    user_leagues = UserLeague.where(:user_id => current_user.id) 
    if(user_leagues.count == 1) 
     user_league_url(user_leagues[0].league.id) 
    else 
     "https://stackoverflow.com/users/#{current_user.id}/leagues" 
    end 
    end 

のように見えます。私は上記の「after_sign_in_path_for」機能を削除して、管理者は正常に動作します(しかし、私、私のレールのサーバーを再起動した場合

undefined method `admin_user_url' for #<ActiveAdmin::Devise::SessionsController:0x007f8be2f3e420> 

基本的に私はそれを下にトレースさ:私はこのエラーを取得し、インストール後に、アクティブな管理にサインインしようと毎回私のアプリにログインすることはできません)、私はそれを入れてサーバを再起動すると、管理ページからエラーが表示されます。私は間違って何をしていますか?私のアプリのログインフローを維持し、アクティブな管理者にログインするにはどうすればいいですか?

答えて

1

ActiveAdminを使用していないと、私はあなたが内部でリダイレクトを使用している方法を乗り越えていると思いますか?

あなたはCURRENT_USERのブロック内のコードをラップしようとすることができ、これだけ火災あなたのコードは、それがログインユーザーの場合:

def after_sign_in_path_for(resource_or_scope) 
    if current_user? 
    user_leagues = UserLeague.where(:user_id => current_user.id) 
    if(user_leagues.count == 1) 
     user_league_url(user_leagues[0].league.id) 
    else 
     "https://stackoverflow.com/users/#{current_user.id}/leagues" 
    end 
    else 
    super 
    end 
end 
関連する問題