如何在Rails 3应用程序中获取所有引擎的列表

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

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引擎的控制器所需的

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

 Rails::Application::Railties.engines 

这已经改变了Rails 4.1。 已弃用的答案已被弃用,现在获取已安装的Rines应用程序的新方法是:

 ::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 

尝试:

 Rails::Application.railties.engines 

对于Rails 4,最好的方法是:

 Rails.application.railties