我可以使用具有许多资源的cancan吗?

时间:2011-03-03 19:39:50

标签: ruby-on-rails-3 cancan

我使用设计并创建了两个模型,Doctor和Patient。 当我写load_and_authorize_resource cancan给出异常时

undefined local variable or method `current_user

我如何在两者中使用cancan?

2 个答案:

答案 0 :(得分:4)

在Application Controller中有一个名为current_ability的方法,你可以简单地覆盖它。

Changing current_ability documentation

它看起来像这样

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中的initialize方法根据具体情况接收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 Full doc

答案 1 :(得分:0)

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