Cancan Undefined Method'用户'问题

时间:2011-06-01 22:56:23

标签: ruby-on-rails cancan

我遇到了在我的cancan控制器中定义用户权限的问题:

class Ability
  include CanCan::Ability

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

    if user.role? :admin
      can :manage, :all
    else
    can :read, :all
    can :update, User do |user|  
      user.try(:user) == user  
    end
    end
  end
end

这导致NoMethodError:

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

当我尝试编辑/更新用户时。其他一切似乎都很好。

任何帮助表示赞赏

鲍勃

1 个答案:

答案 0 :(得分:6)

问题在于

user.try(:user) == user

基本上是在尝试执行user.user == user

如果有问题的用户实例是登录用户,您似乎只是尝试让用户更新用户模型属性。

请改为尝试:

can :update, User, :id => user.id

说“当@user.idcurrent_user.id相同时,可以更新用户模型。”

您的块表示法不明确,因为您的块变量|user|与传递给Ability模型的user相同。


作为那些仍然掌握Ruby的人的旁注,

can :update, User, :id => user.id

与:

相同
can(:update, User, { id: user.id })