未初始化的控制器常数

时间:2014-05-10 20:43:44

标签: ruby-on-rails cancan

您好我正在尝试使用cancan但我有非常恼人的错误,即:未初始化的常量版

控制器

class EditionsController < ApplicationController
  before_filter :authenticate_user! #devise
  load_and_authorize_resource
  def index
  end
end

用这条路线:

get "editions/index"

和这样的能力:

user ||= User.new # guest user (not logged in)
if user.has_role? "admin"
  can :manage, Edition
  cannot :commission
else
  can :read, :commission
end

另外一个问题,我如何为奇异(名称)控制器创建cancan能力? 例如PhotoController

2 个答案:

答案 0 :(得分:7)

问题是您使用的是自定义类。

CanCan尝试将控制器类名称单一化以匹配模型类名称,有时这不是我们所期望的:

  

...

     

如果模型类的命名空间与控制器不同,则需要指定:class选项。

来源:https://github.com/ryanb/cancan/wiki/authorizing-controller-actions

在我的情况下,我有一个没有模型的类,所以我只是在命令的末尾添加了“:class =&gt; false”:

load_and_authorize_resource :class => false

答案 1 :(得分:1)

如果您在load_and_authorize_resource中定义了ApplicationController,并且只想为此控制器覆盖它:

class EditionsController < ApplicationController
  skip_load_and_authorize_resource

  def index
    @editions = Edition.accessible_by(current_ability).order(:date)
  end
end