Невозможно войти в пользовательский ресурс - ошибка NoMethod в devise / sessionController # create - PullRequest
4 голосов
/ 27 апреля 2011

У меня странная проблема с Rails 3 и Devise.У меня есть 3 типа пользователей для моего приложения на Rails:
Клиенты, владельцы и администраторы

rout.rb:

   devise_for :admins
   devise_for :owners
   devise_for :clients 

application_controller.rb:

def after_sign_in_path_for(resource)
    if resource == "client"
        "/client_accounts/" + current_client.id.to_s
    elsif resource == "admin"
        stored_location_for(:admins) || "/admin/control_panel"
    elsif resource == "owner" 
        stored_location_for(:owners) || "/client_accounts"
    end
end

Мой вход в систему для владельцев и администраторов работает нормально, но я не могу заставить работать вход клиентов .. Вот ошибка, которую я получаю:

NoMethodError in Devise/sessionsController#create
undefined method `client_url' for #<Devise::SessionsController:0x10a98f868>

Трассировка приложения пуста.

Ответы [ 2 ]

8 голосов
/ 27 апреля 2011

Согласно Devise docs метод after_sign_in_path_for принимает фактический объект Client, но вы сравниваете входные данные с набором строк, которые все возвращают false, поэтому ваше большое предложение if вернет nil , Не уверен, для чего предназначен Devise, когда это происходит, но поиск client_url был бы разумным значением по умолчанию.

Попробуйте вместо этого:

def after_sign_in_path_for(resource)
  case resource
    when Client then "/client_accounts/" + current_client.id.to_s
    when Admin  then stored_location_for(:admins) || "/admin/control_panel"
    when Owner  then stored_location_for(:owners) || "/client_accounts"
  end
end

Если это не поможет, я бы поставил оператор отладчика в верхней части метода, чтобы убедиться, что ваши помощники, такие как 'current_client', работают так, как вы ожидаете (и чтобы убедиться, что after_sign_in_path_for вызывается вообще) .

0 голосов
/ 27 апреля 2011

Просто мысль, но что произойдет, если вы измените ответ на: «/client_accounts/#{current_client.id.to_s}"

Как выглядит результат ваших рейк-маршрутов?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...