我正在使用Devise& 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>
它指的是我为CanCan设置的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
它说的是问题是all.try(:user)== user。我不明白为什么这会导致问题?似乎无论我为重定向做了什么,它总会带我去{app} / users / 22并发出此错误。
答案 0 :(得分:0)
按照SO post说明您正在尝试执行user.try(:user) == user
,这是您遇到的所有问题的根源。
因此,您可以使用can :manage, :all, :id => user.id
来解决问题。