У активного администратора возникают проблемы при входе в систему, когда after_sign_in_path_for (devise) в моем приложении - PullRequest
0 голосов
/ 28 марта 2012

Так что я использую Devise для аутентификации пользователя в моем приложении rails. У меня есть настройка, которая проверяет, является ли пользователь членом лиги. Если он является просто членом 1 лиги, он перенаправляется на страницу user_league, если у него несколько лиг, он перенаправляется на свой индекс лиги, чтобы они могли выбирать, какую лигу они хотят администрировать. метод after_sign_in_path_for выглядит следующим образом

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
        "/users/#{current_user.id}/leagues"
    end
  end

Я установил ram admin gem 'Active Admin', который по умолчанию также использует devise для аутентификации. Каждый раз, когда я пытаюсь войти в Active Admin после установки, я получаю эту ошибку:

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

В основном я проследил это до того, что если я удалю функцию 'after_sign_in_path_for' выше и перезапущу свой сервер rails, администратор работает нормально (но я не могу войти в свое приложение, как я хочу), и если я вставлю его обратно перезагрузите мой сервер, я снова получаю сообщение об ошибке на странице администратора. Что я делаю не так? Как я могу поддерживать поток входа в мое приложение и по-прежнему входить в систему с активным администратором?

1 Ответ

1 голос
/ 28 марта 2012

Не используя 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
      "/users/#{current_user.id}/leagues"
    end
  else
    super
  end
end
...