我遇到了在我的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>
当我尝试编辑/更新用户时。其他一切似乎都很好。
任何帮助表示赞赏
鲍勃
答案 0 :(得分:6)
问题在于
user.try(:user) == user
基本上是在尝试执行user.user == user
如果有问题的用户实例是登录用户,您似乎只是尝试让用户更新用户模型属性。
请改为尝试:
can :update, User, :id => user.id
说“当@user.id
与current_user.id
相同时,可以更新用户模型。”
您的块表示法不明确,因为您的块变量|user|
与传递给Ability模型的user
相同。
作为那些仍然掌握Ruby的人的旁注,
can :update, User, :id => user.id
与:
相同can(:update, User, { id: user.id })