为什么我的Rails可安装引擎无法正确加载辅助方法?

bod*_*ous 18 rubygems ruby-on-rails ruby-on-rails-3.2

我已经构建了一个可以作为引擎安装的rails gem.

引擎的作用域是它自己的命名空间.

在引擎中,有一个MyEngine::ApplicationHelper模块添加了一堆视图助手方法.

在我的应用程序布局中,我指的是其中一些方法.

当我第一次在开发模式下加载任何页面时,我得到一个NoMethodError,抱怨该方法(在gem中定义ApplicationHelper)不存在.

ApplicationController在我的应用内编辑后,问题就会自行解决.

有些东西告诉我这归结于Rails自动加载的最新变化; 我正在使用Rails 3.2.2

我不能为我的生活解决为什么这不能正常工作:/

Jos*_*wis 37

我认为Rails指南在这里有答案.

要在您的应用中包含引擎中的特定助手,请执行以下操作:

class ApplicationController < ActionController::Base
  helper MyEngine::ApplicationHelper
end
Run Code Online (Sandbox Code Playgroud)

要在您的应用中包含引擎中的所有帮助:

class ApplicationController < ActionController::Base
  helper MyEngine::Engine.helpers
end
Run Code Online (Sandbox Code Playgroud)

  • 我们如何才能将主应用程序助手访问到引擎的视图中? (4认同)
  • @AmitPatel(或任何其他人偶然发现这一点) - `helper Application :: ApplicationHelper`让我在引擎控制器中加载应用程序的应用程序助手(我已经覆盖了).其他人也可以这样添加. (2认同)

小智 7

GemName::ApplicationHelper为了加载要在引擎本身的视图中使用的引擎,我在以下内容中添加了以下内容engine.rb

module GemName
  class Engine < ::Rails::Engine
    isolate_namespace GemName

    initializer 'local_helper.action_controller' do
      ActiveSupport.on_load :action_controller do
        helper GemName::ApplicationHelper
      end
    end
  end
end
Run Code Online (Sandbox Code Playgroud)