У меня есть двигатель, и в моем основном приложении у меня есть контроллеры, наследующие некоторые контроллеры двигателя.Рельсовые двигатели: Наследование контроллеров и маршруты
class UsersController < MyEngine::UsersController
end
Как заставить мой движок использовать субконтроллеры без необходимости воссоздавать все мои маршруты в главном приложении?
---- с декораторов (раствор JensD в):
Я добавил к моему engine.rb файл
config.to_prepare do
Dir.glob(Rails.root + "app/decorators/**/my_engine/*_decorator*.rb").each do |c|
require_dependency(c)
end
end
и декоратора
MyEngine::MyController.class_eval do
end
Но super
не представляется возможным. ..
Решение будет заключаться в создании субконтроллера в моем двигателе и использовать декоратор на нем, но это кажется странным ...
Есть два способа сделать это. 1. Просто переопределите контроллер самого двигателя. 2. Вы можете взглянуть на class_eval, который будет переоценивать ваш контроллер с дополнительной логикой внутри контроллера «decorator». – JensDebergh
Да, я использую первый путь, но маршруты используют родительский контроллер, чтобы заставить их использовать субконтроллер (без перезаписи). – Zak
Вы фактически не перекрываете контроллер от двигателя. Вы просто подклассифицируете его, что означает его совершенно другой контроллер с тем же поведением «MyEngine :: UsersController». Для переопределения создать этот файл: 'приложение/контроллеры/my_engine/users_controller.rb' В этом файле убедитесь, что определение класса внутри модуля под названием' MyEngine' Это будет полностью переопределить контроллер. Я думаю, что ваша самая лучшая и безопасная ставка заключается в том, чтобы пойти с декоратором контроллера. Потому что вы потеряете всю логику, когда полностью переопределите. или переписывать маршруты не по-другому. – JensDebergh