alexfedoseev
@alexfedoseev
React & Rails Dev

Использование хелперов главного приложения в представлениях mountable engine

У меня есть mountable engine, который монтируется в главное приложение.
В главном приложении, непосредственно в ApplicationHelper есть очень простой хелпер edit_link(path): отдаешь ему url, он возвращает html-код ссылки.
У engine есть пара контроллеров с представлениями (интерфейсами), в которых я хочу использовать этот хелпер.

По умолчанию Rails мне этого сделать не даёт: я пробовал использовать и просто edit_link(path), и main_app.edit_link(path) (это работает с роутами, но не с хелперами).

Тогда я решил сделать так:
app/helpers/my_engine/application_helper.rb

module MyEngine
  module ApplicationHelper
    include ActionView::Helpers::ApplicationHelper
  end
end


Оно сработало, но. Когда я перезапустил dev-сервер, то при первом запросе к интерфейсу engine словил эксепшн:
uninitialized constant ActionView::Helpers::ApplicationHelper

Я сделал реквест к контроллеру главного приложения и вернулся к интерфейсу engine — оно снова работает. Снова перезапустил сервер и сделал первый запрос к интерфейсу engine — оно работает. И больше словить эксепшн uninitialized constant у меня не получается.

Хочется понять что это было и можно ли таким методом включать хелперы главного приложения в представления mountable engine.
  • Вопрос задан
  • 2552 просмотра
Решения вопроса 1
alexfedoseev
@alexfedoseev Автор вопроса
React & Rails Dev
В общем, вот так вроде заработало:

lib/my_engine/engine.rb (это внутри engine)
module MyEngine
  class Engine < ::Rails::Engine
    isolate_namespace MyEngine
    config.to_prepare do
      ApplicationController.helper(ActionView::Helpers::ApplicationHelper)
    end
  end
end


P.S. Тот include убил соответственно.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы