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

发布于 2024-10-18 12:45:16 字数 598 浏览 1 评论 0 原文

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

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 引擎的控制器所必需的主应用程序

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

仅此而已 2024-10-25 12:45:16

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

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
老娘不死你永远是小三 2024-10-25 12:45:16

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

Rails::Application::Railties.engines

As of 5/10/2011 and Rails 3.1 beta, it's now

Rails::Application::Railties.engines
庆幸我还是我 2024-10-25 12:45:16

尝试:

Rails::Application.railties.engines

Try:

Rails::Application.railties.engines
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文