2013-03-01 3 views
0

Я использую Devise & CanCan для моего приложения. Когда пользователь входит в, они принимаются на свою страницу счетов - я настроил пользовательские перенаправления для этого:CanCan stoping Devise redirect

def after_sign_in_path_for(resource) 
    url_for :controller => '/users', :id => current_user.id, :action => 'myaccount' 
end 

Однако, когда я пытаюсь сделать то же самое для того, когда при регистрации пользователя - то есть с помощью after_sign_up_path_for (ресурсы), то я дал эту ошибку:

NoMethodError in UsersController#show 

undefined method `user' for #<User:0x25d15e8> 

он ссылается на файл ability.rb, который я создал для канкана, который является следующим:

class Ability 
    include CanCan::Ability 

    def initialize(user) 
    user ||= User.new # guest user 

    can :manage, :all do |all| 
     all.try(:user) == user 
    end 

линии он говорит является проблемой lem is all.try (: user) == пользователь. Я не понимаю, почему это вызывает проблему? Кажется, что независимо от того, что я поставил для перенаправления, он всегда будет принимать меня, например. {app}/users/22 и укажите эту ошибку.

+0

вы, вероятно, захотите разбить это на модели вместо того, чтобы пытаться это сделать. это будет легче читать и манипулировать позже, если вам нужно обновить разрешения. – jvnill

ответ

0

Следуйте за SO post, который сообщает, что вы пытаетесь выполнить user.try(:user) == user, который является источником всех ваших проблем.

Для решения проблемы вы можете использовать can :manage, :all, :id => user.id.

+0

Спасибо, что остановила ошибку. Однако, когда я зарегистрировал нового пользователя, они все еще перенаправляются на/user /: id, а не на user /: id/myaccount, как указано в перенаправлении. Любая идея почему? – ecs

+0

Является ли перенаправление все еще возникающим, если вы удаляете код 'can: manage'? –

+0

Если я заберу блок can: manage, тогда пользователь будет перенаправлен на корневой URL-адрес с исключением, запрещенным доступом. Это странно, потому что, если я вручную набираю URL-адрес при появлении экрана ошибки, он позволяет получить доступ к правильной странице, и я все равно получаю также «успешную подпись». – ecs

Смежные вопросы