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

时间:2011-02-19 08:03:35

标签: ruby-on-rails ruby-on-rails-3 rubygems ruby-on-rails-plugins rails-engines

根据Rails 2.x中的Rails engines extending functionality,可以做到

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中我需要做些什么才能获得这样的引擎列表?

Extending controllers of a Rails 3 Engine in the main app

需要这样做

4 个答案:

答案 0 :(得分:15)

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

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

Here's a reference to the commit in github进行更改(并显示在初始弃用后如何实施...)

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

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

答案 1 :(得分:13)

截至2011年5月10日和Rails 3.1 beta,现在是

Rails::Application::Railties.engines

答案 2 :(得分:2)

尝试:

Rails::Application.railties.engines

答案 3 :(得分:0)

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

Rails.application.railties