2

如何将 Rails 引擎 ApplicationController(它的方法)合并到主应用程序中?我需要访问这些引擎控制器方法,并且我想在我的主应用程序的 ApplicationController 中不使用“包含”。

module MyEngine
  class Engine < Rails::Engine
    initializer  "myengine.load_helpers" do
      ActiveSupport.on_load(:action_controller) do
        include MyEngine::Helpers
      end
    end
  end
end

以上是在A way to add before_filter from engine to application上发布的,但我的理解是助手只能查看可用,而我需要在我的控制器中访问它们。

4

1 回答 1

7

我之前为一个名为 dynamic_menu 的 rails gem 做过这个

基本上看起来像

require 'dynamic_menu'

module DynamicMenu
  class Engine < Rails::Engine
    initializer "dynamic_menu.menu_items" do |app|
      ActionController::Base.send :include, DynamicMenu::MenuItems
    end
  end
end

所以我假设你想要的是

require 'myEngine'
class Engine < Rails::Engine
  initializer "myengine.load_helpers" do |app|
    ActionController::Base.send :include, MyEngine::Helpers
  end
end

您想添加在 lib 中使用的 .rb 文件的要求,然后只需将模块发送到 ActionController::Base

在github上查看我的 gem,它本质上非常简单,也许可以提供一些指导。评论,我可以解释更多。

于 2012-06-20T17:02:19.467 回答