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

时间:2012-03-21 17:29:41

标签: ruby-on-rails ruby-on-rails-3.2 rubygems

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

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

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

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

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

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

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

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

2 个答案:

答案 0 :(得分:35)

我认为Rails指南的答案是here

要在您的应用中包含引擎中的特定助手:

class ApplicationController < ActionController::Base
  helper MyEngine::ApplicationHelper
end

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

class ApplicationController < ActionController::Base
  helper MyEngine::Engine.helpers
end

答案 1 :(得分:0)

要加载要在引擎本身视图中使用的引擎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