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.id
与current_user.id
相同时,可以更新用户模型。”
由于块变量|user|
块符号不明确 与传入Ability模型的user
相同。
作为那些仍然掌握Ruby的人的旁注,
can :update, User, :id => user.id
是相同的:
can(:update, User, { id: user.id })