Почему мой Rails-монтируемый движок не правильно загружает вспомогательные методы?
Я построил жерл рельсов, который монтируется как двигатель.
Двигатель привязан к собственному пространству имен.
В двигателе есть модуль MyEngine::ApplicationHelper
, который добавляет кучу методов вспомогательного представления.
В моем макете приложения я ссылаюсь на некоторые из этих методов.
Когда я сначала загружаю любую из страниц в режиме разработки, я получаю NoMethodError
, жалуясь, что метод (определенный в gem ApplicationHelper
) не существует.
Как только я редактирую ApplicationController
в своем приложении, проблема исправляется сама.
Что-то подсказывает мне, что это связано с недавними изменениями в автозагрузке Rails; Я использую Rails 3.2.2
Я не могу для жизни понять, почему это не работает должным образом:/
Ответы
Ответ 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