【问题标题】:Cancan Undefined Method 'user' ProblemsCancan 未定义方法“用户”问题
【发布时间】:2011-06-01 22:56:23
【问题描述】:

我在我的 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>

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

任何帮助表示赞赏

鲍勃

【问题讨论】:

  • user.try(:user) == user 是干什么用的?在您的 User 模型中是否有一个名为 user 的方法?

标签: ruby-on-rails cancan


【解决方案1】:

问题是

user.try(:user) == user

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

看起来你试图只让用户更新用户模型属性,如果有问题的用户实例是登录用户。

试试这个:

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

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

您的块符号不明确,因为您的块变量 |user| 与传递给能力模型的 user 相同。


作为对那些仍在掌握 Ruby 的人的补充说明,

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

等同于:

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

【讨论】:

  • 您好,感谢您的回答。那工作得很好。刚接触铁轨,有时很难为树木找到木材。
猜你喜欢
  • 2011-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多