引擎中的康康康

Cancancan in a engine

我想在引擎中使用 rails gem cancancan (https://github.com/CanCanCommunity/cancancan)。所以我将它添加到我的 gemspec 文件中,如下所示:

s.add_dependency "cancancan"

在引擎虚拟应用程序和测试应用程序中,我加载了我的引擎,但我总是收到关于每个 cancancan 方法的未定义方法的错误。

undefined local variable or method `load_and_authorize_resource'
undefined local variable or method `can?'
[...]

这是我在主应用程序中的 ability.rb 文件:

class Ability
  include CanCan::Ability

  def initialize(user)
    user ||= User.new # guest user (not logged in)
    can :manage, :all
  end
end

我尝试了几种在引擎中使用 cancancan 的解决方案,但没有找到适用于我的引擎的解决方案。以下是一些示例:

我错在哪里?发布的链接之一真的是解决方案还是 wrong/outdated?有没有在引擎中使用 cancancan 的好教程?谢谢!

您的 WelcomeController 中有 load_and_authorize_resource,它正在尝试加载不存在的 Welcome 模型。相反,尝试使用 authorize_resource class: false,所以

 class WelcomeController < ApplicationController
   authorize_resource class: false
   # rest of your code
 end

我可以通过将 Cancancan 从 1.9.2 更新到实际的 1.10.1 来解决我的问题,并将我的引擎与来自 post 的引擎进行比较:https://github.com/CanCanCommunity/cancancan/issues/151#issuecomment-69487040