Я думаю, что вы можете рассуждать об этом задом наперед.
Если ваш двигатель обеспечивает:
module MyEngine
module MyHelper
def foo
end
end
end
Вы можете расширить метод (вы можете назвать его decorate, но я не уверен, технически ли это шаблон декоратора) в вашем основном приложении:
module MainApp
module MyHelper
extend ::MyEngine::MyHelper
def foo
super
do_something_else
end
end
end
При использовании шаблона module-mixin (что и делает ActiveSupport :: Concern) вы расширяете модули модулями и включаете модули в классы.
Если ваш движок и основное приложение «разделяют частичное» - его нужно просто поместить в движок, так как Rails сначала будет искать представление при рендеринге в каталоге app / views приложения, прежде чем искать его смонтированные движки.
Таким образом, основное приложение всегда может переопределить функции, предоставляемые движком, в то время как обратное неверно.
Если вы хотите сделать метод, предоставляемый конфигурируемым движком, лучше использовать параметр конфигурации Rails (или отдельную конфигурацию модуля) или просто аргументы метода, а не какой-нибудь сумасшедший цирк с круговой зависимостью.