7

根据Rails 引擎扩展Rails 2.x 中的功能,可以做

Rails::Initializer.new(Rails.configuration).plugin_loader.engines

此代码在 Rails 3 中不起作用

ActionController::RoutingError (undefined method `new' for Rails::Initializer:Module):
  config/application.rb:12:in `require_or_load'

我需要在 Rails 3 中做什么才能获得这样的引擎列表?

这是在主应用程序中扩展 Rails 3 引擎的控制器所必需的

4

3 回答 3

17

Rails 4.1 改变了这一点。已接受的答案已弃用,现在为 Rails 应用程序获取已安装引擎的新方法是:

::Rails::Engine.subclasses.map(&:instance)

这是对 github 中进行更改的提交的引用(并且还显示了它在初始弃用后是如何实现的......)

如果您需要使用 Rails 4.1 中的先前解决方案:

module Rails
    class Engine
        class Railties
            def self.engines
                @engines ||= Rails::Engine.subclasses.map(&:instance)
            end
        end
    end
end
于 2014-05-16T18:16:45.513 回答
13

截至 2011 年 5 月 10 日和 Rails 3.1 测试版,现在是

Rails::Application::Railties.engines
于 2011-05-11T00:00:05.727 回答
2

尝试:

Rails::Application.railties.engines
于 2011-02-19T08:13:53.827 回答