我正在编写一个可安装的Rails 3引擎,我将我的引擎路由与主机应用程序相结合。但是,主机应用程序的路由优先于我的引擎路由。有没有办法可以覆盖主机应用程序的路由(特别是根路由)?
这是my_enging/config/routes.rb
中我的引擎路线:
MyEngine::Engine.routes.draw do
root :to => "home#index"
end
# Mount engine routes to host application
Rails.application.routes.draw do
mount MyEngine::Engine, :at => "/"
end
这是rake routes
的结果,主持人的根位于顶部:
root / welcome#index
my_engine / MyEngine::Engine
root / home#index
Spree是这样做的一个宝石,但我无法找到它们是如何实现的。
答案 0 :(得分:0)
人们更倾向于做相反的事情,所以我无法弄清楚你为什么需要这个,因为应该能够覆盖引擎路线。实际上我没有回答如何强制引擎覆盖应用程序路由,但是:
Spree正在通过eval_block以某种方式动态添加路由,我猜想。
您可以跳过root to:
以及应用程序中的所有不需要的路线,然后将出现引擎路线。不要两者兼顾。我没有在您的应用程序中看到root指定,但我只是运行一个实验,一切正常!
W12::Engine.routes.draw do
root to: 'details#index'
end
MyCarsApplication.routes.draw do
mount Common::Engine => "/"
end
只有一条路线:
root / details#index
This post about creating not isolated engines也可能有帮助。
如果您找到了确切的答案,请发布。