问题
According to Rails engines extending functionality in Rails 2.x one could do
Rails::Initializer.new(Rails.configuration).plugin_loader.engines
This code is not working in Rails 3
ActionController::RoutingError (undefined method `new' for Rails::Initializer:Module):
config/application.rb:12:in `require_or_load'
What do I need to do in Rails 3 to get such list of engines?
This is needed for Extending controllers of a Rails 3 Engine in the main app
回答1:
As of 5/10/2011 and Rails 3.1 beta, it's now
Rails::Application::Railties.engines
回答2:
This has changed with Rails 4.1. The accepted answer is deprecated and the new way to get the installed Engines for a Rails application is now:
::Rails::Engine.subclasses.map(&:instance)
Here's a reference to the commit in github making the change (and also showing how it was implemented after initial deprecation...)
If you need to use the previous solution from Rails 4.1:
module Rails
class Engine
class Railties
def self.engines
@engines ||= Rails::Engine.subclasses.map(&:instance)
end
end
end
end
回答3:
Try:
Rails::Application.railties.engines
回答4:
For Rails 4 the best way is:
Rails.application.railties
来源:https://stackoverflow.com/questions/5049640/how-to-get-the-list-of-all-engines-in-rails-3-app