Если извлечение общего кода между контроллерами в модуль не работает, я бы использовал промежуточное программное обеспечение Rack. Я не видел кода, который использует ActiveRecord
в промежуточном программном обеспечении, но я не знаю ни одной причины, почему это невозможно, поскольку люди использовали Redis
и тому подобное.
В противном случае я думаю, что единственным вариантом будет возобновление обработки запроса с чем-то вроде (непроверенный, псевдо-пример):
env['REQUEST_URI'] = new_controller_uri_with_your_params
call(env)
Это похоже на реализацию интеграционных тестов. Но я не знаю, является ли все, начиная с call
до тех пор, пока вы не нажмете на контроллер, идемпотентным и безопасным для повторного запуска таким образом. Вы можете проследить через источник и увидеть. Но даже если сейчас все в порядке, он может сломаться в любой будущей версии направляющих или стойки.
Использование промежуточного программного обеспечения позволит избежать этого, позволяя перехватить запрос перед его выполнением. Вы по-прежнему сможете обмениваться кодом с приложением rails, распаковывая его в общие модули, включенные в оба места.
Честно говоря, я думаю, что простое выполнение простого факторинга кода общего контроллера, вероятно, будет чище, но трудно узнать без подробностей вашей ситуации, поэтому я решил пойти дальше и предложить это.