4

我使用设计并创建了两个模型,医生和患者。当我写load_and_authorize_resourcecancan时给出了一个例外

undefined local variable or method `current_user

我怎样才能对他们两个都使用cancan?

4

2 回答 2

4

应用程序控制器中有一个方法调用current_ability,您可以简单地覆盖它。

更改 current_ability 文档

它看起来像这样

def current_ability
  @current_ability ||= Ability.new(current_user)
end

但是您可以将其更改为

def current_ability
  if current_doctor
    @current_ability ||= Ability.new(current_doctor)
  else
    @current_ability ||= Ability.new(current_patient)
  end
end

这将允许 app/models/ability.rb 中的初始化方法根据具体情况接收 current_patient 或 current_doctor。你可以自定义它看起来像这样

class Ability
  include CanCan::Ability

  def initialize(resource)
    if resource.class == Patient
      can, Read Something
      can, Edit Other
      .
      .
      .
    else
      can, Read Something
      can, Edit Other
      .
      .
      .
    end
      .
      .
      .

希望对您有所帮助,您还可以查看 cancan完整文档

于 2011-06-21T21:36:01.337 回答
0

您可以在此处找到 Devise 和 Cancan 的完整配置:第 1 部分第 2 部分

于 2011-03-03T19:48:25.213 回答