从Mountable Engine覆盖主机应用程序的根路由

时间:2012-06-13 20:52:19

标签: ruby-on-rails ruby-on-rails-3 rails-engines

我正在编写一个可安装的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是这样做的一个宝石,但我无法找到它们是如何实现的。

1 个答案:

答案 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也可能有帮助。

如果您找到了确切的答案,请发布。