7

Rails 2.xの機能を拡張するRailsエンジンによると、

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

このコードはRails3では機能しません

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

このようなエンジンのリストを取得するには、Rails 3で何をする必要がありますか?

これは、メインアプリでRails3エンジンのコントローラーを拡張するために必要です

4

3 に答える 3

17

これはRails4.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日およびRails3.1ベータ版の時点で、現在

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

試す:

Rails::Application.railties.engines
于 2011-02-19T08:13:53.827 に答える