【问题标题】:Why is my Rails mountable engine not loading helper methods correctly?为什么我的 Rails 可安装引擎没有正确加载辅助方法?
【发布时间】:2012-03-21 17:29:40
【问题描述】:

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

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

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

在我的应用程序布局中,我参考了其中一些方法。

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

一旦我在我的应用程序中编辑ApplicationController,问题就会自行纠正。

有些事情告诉我这是由于 Rails 的自动加载最近发生的变化;我正在使用 Rails 3.2.2

我终其一生都无法弄清楚为什么它不能正常工作:/

【问题讨论】:

  • 我面临同样的问题可能是因为(更快的开发模式和路由)weblog.rubyonrails.org/2012/1/20/…。如果您找到解决方案,请发布,如果我找到解决方案,我会让您知道。

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


【解决方案1】:

我认为 Rails 指南有答案here

要将引擎中的特定帮助程序包含在您的应用中:

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

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

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

【讨论】:

  • 我们如何将主应用助手访问到引擎的视图中?
  • @AmitPatel(或任何其他偶然发现此问题的人)-helper Application::ApplicationHelper 帮助我将应用程序的应用程序帮助程序加载到引擎控制器(我已覆盖)中。其他的也可以这样添加。
【解决方案2】:

为了加载引擎的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

【讨论】:

  • 嗨@ryabrody 我希望我能给你投票十次。但是在 2022 年,这个解决方案非常有效!!!
猜你喜欢
  • 2015-09-09
  • 1970-01-01
  • 2013-11-24
  • 1970-01-01
  • 1970-01-01
  • 2012-06-28
  • 1970-01-01
  • 1970-01-01
  • 2011-11-26
相关资源
最近更新 更多