未初始化的控制器常数

bko*_*yyk 0 ruby-on-rails cancan

嗨,我正在尝试使用康康,但我有非常恼人的错误,即:未初始化的恒定版

对于控制器:

class EditionsController < ApplicationController
  before_filter :authenticate_user! #devise
  load_and_authorize_resource
  def index
  end
end
Run Code Online (Sandbox Code Playgroud)

这条路线:

get "editions/index"
Run Code Online (Sandbox Code Playgroud)

和这样的能力:

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

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

小智 7

问题是您正在使用自定义类.

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

...

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

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

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

load_and_authorize_resource :class => false
Run Code Online (Sandbox Code Playgroud)