Как получить список всех движков в приложении Rails 3 - PullRequest
7 голосов
/ 19 февраля 2011

Согласно движкам 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 Engine в основном приложении

Ответы [ 4 ]

15 голосов
/ 16 мая 2014

Это изменилось в 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
13 голосов
/ 11 мая 2011

Начиная с 10.05.2011 и бета-версии Rails 3.1, теперь

Rails::Application::Railties.engines
2 голосов
/ 19 февраля 2011

Попробуйте:

Rails::Application.railties.engines
0 голосов
/ 28 сентября 2015

Для Rails 4 лучший способ:

Rails.application.railties
...