我有一个名为 X 的 rails 应用程序和一个名为 Y 的 rails 可安装引擎。App X 具有设计,引擎 Y 具有 CanCan,可与主机应用程序设计安装一起使用。为了分离宿主应用程序和可挂载引擎的关注点,引擎具有CanCan能力模型以及宿主应用程序。我的问题如下,根据 CanCan 文档,您可以像https://github.com/ryanb/cancan/wiki/Changing-Defaults一样更改默认能力模型。我的问题是,如果我在可安装引擎应用程序控制器中设置默认能力类,如下所示:
module Y
class ApplicationController < ActionController::Base
def current_ability
@current_ability = Ability.new(current_user)
end
end
end
我收到以下错误:
uninitialized constant Ability
(附带说明,当我编辑文件并重新加载页面而不重新启动服务器时,它工作正常)
但是,如果我将相同的方法放入主机应用程序的应用程序控制器中:
class ApplicationController < ActionController::Base
def current_ability
@current_ability = Y::Ability.new(current_user)
end
end
一切都按预期工作(这也意味着 Devise 和 CanCan 设置正确)。
有人知道为什么会这样吗?我可能无法正确理解可挂载引擎,但我一直认为它们与主机应用程序是隔离的,因此在访问由可挂载引擎定义的页面时,主机应用程序的应用程序控制器甚至不应该被执行。