6

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

4

1 回答 1

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

这篇关于创建非独立引擎的帖子也可能会有所帮助。

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

于 2015-08-20T10:13:43.443 回答