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

And*_*rei 7 rubygems ruby-on-rails ruby-on-rails-plugins rails-engines ruby-on-rails-3

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

Rails::Initializer.new(Rails.configuration).plugin_loader.engines
Run Code Online (Sandbox Code Playgroud)

此代码在Rails 3中不起作用

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

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

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

Dar*_*cks 15

这已经改变了Rails 4.1.已弃用的答案已被弃用,现在为获取已安装的Rails应用程序引擎的新方法如下:

::Rails::Engine.subclasses.map(&:instance)
Run Code Online (Sandbox Code Playgroud)

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

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

module Rails
    class Engine
        class Railties
            def self.engines
                @engines ||= Rails::Engine.subclasses.map(&:instance)
            end
        end
    end
end
Run Code Online (Sandbox Code Playgroud)


Jer*_*nes 13

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

Rails::Application::Railties.engines
Run Code Online (Sandbox Code Playgroud)