Cancan Undefined Method’用户’问题

我遇到了在我的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.try(:user) == user 

基本上是尝试执行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 })