CanCan可以停止Devise重定向

时间:2013-03-01 12:44:22

标签: ruby-on-rails devise cancan

我正在使用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并发出此错误。

1 个答案:

答案 0 :(得分:0)

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

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