Подтвердить что ты не робот

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

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

Двигатель привязан к собственному пространству имен.

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 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