2013-03-01 73 views
0

我正在使用设计& CanCan为我的应用程序。当用户登录,他们被带到他们的账户页面 - 我已经设置了一个自定义的重定向这样的:CanCan停止设计重定向

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是all.try(:user)==用户。我不明白为什么这会导致问题?这似乎是,无论我为重定向提供什么,它总是会让我去例如{app}/users/22并发出此错误。

+0

你可能想把它分成模型而不是尝试。如果您需要更新权限,稍后将更容易阅读和操作。 – jvnill 2013-03-01 16:06:00

回答

0

请按照SO post的说明,您正试图执行user.try(:user) == user这是您所有问题的根源。

因此,您可以使用can :manage, :all, :id => user.id来解决问题。

+0

谢谢,这已经阻止了发生的错误。但是,当我注册一个新用户时,他们仍然被重定向到/ user /:id,而不是重定向中指定的user /:id/myaccount。任何想法为什么? – ecs 2013-03-01 13:15:21

+0

如果删除'can:manage'代码,重定向是否仍然存在? – 2013-03-01 13:20:27

+0

如果我拿走can:manage块,那么用户将被重定向到具有访问被拒绝异常的根网址。这很奇怪,因为如果我在错误屏幕出现时手动输入url,它将允许访问正确的页面,并且我仍然会获得'成功注册'的flash。 – ecs 2013-03-01 14:11:04