可安装引擎的应用控制器存在问题

时间:2012-05-21 09:52:59

标签: ruby ruby-on-rails-3 devise cancan rails-engines

我有一个名为X的rails应用程序和一个名为Y的rails可安装引擎。 App X有Devise,引擎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设置正确)。

任何人都知道为什么会这样?我可能无法正确理解可安装引擎,但我一直认为它们与主机应用程序是隔离的,因此当访问可安装引擎定义的页面时,主机应用程序的应用程序控制器甚至不应该被执行。

1 个答案:

答案 0 :(得分:0)

很可能根本没有加载您的引擎应用程序控制器。如果主应用程序中具有相同的类名,则Rails引擎会表现不佳。 here is the issue if you want to look at.我建议您在引擎中使用显式声明。使用Y :: Ability而不是Ability。