Почему мой движок Rails неправильно загружает вспомогательные методы? - PullRequest
17 голосов
/ 21 марта 2012

Я построил камень рельсов, который монтируется как движок.

Движок ограничен собственным пространством имен.

В движке есть модуль MyEngine::ApplicationHelper, который добавляеткуча вспомогательных методов просмотра.

В моем макете приложения я ссылаюсь на некоторые из этих методов.

Когда я впервые загружаю любую из страниц в режиме разработки, я получаю NoMethodError, жалуясьчто метод (определенный в геме ApplicationHelper) не существует.

Как только я редактирую ApplicationController в моем приложении, проблема исправляется.

Что-то говорит мне, что это не такк последним изменениям в автозагрузке Rails;Я использую Rails 3.2.2

Я не могу на всю жизнь понять, почему это не работает должным образом: /

Ответы [ 2 ]

35 голосов
/ 21 мая 2012

Я думаю, что в путеводителях по Rails есть ответ здесь .

Чтобы включить этого конкретного помощника из вашего движка в ваше приложение:

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

Чтобы включить всех помощников из вашего движка в ваше приложение:

class ApplicationController < ActionController::Base
  helper MyEngine::Engine.helpers
end
0 голосов
/ 09 января 2019

Чтобы загрузить 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
...