您好我正在尝试使用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
答案 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