dhu*_*han 5 ruby-on-rails rails-engines ruby-on-rails-3
我正在编写一个可安装的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
Run Code Online (Sandbox Code Playgroud)
这是结果rake routes,主持人的根位于顶部:
root / welcome#index
my_engine / MyEngine::Engine
root / home#index
Run Code Online (Sandbox Code Playgroud)
Spree是这样做的一个宝石,但我无法找到他们如何实现这一点.
人们更有可能做相反的事情,所以我不明白为什么你需要这个,因为应该能够覆盖引擎路由。实际上我不知道如何强制引擎覆盖应用程序路由,但是:
我认为 Spree 正在通过eval_block以某种方式动态添加路由。
您可以直接跳过root to:应用程序中所有不需要的路由,然后引擎路由就会出现。不要同时保留它们。我没有看到您的应用程序中指定了 root,但我刚刚运行了一个实验,一切正常!
W12::Engine.routes.draw do
root to: 'details#index'
end
MyCarsApplication.routes.draw do
mount Common::Engine => "/"
end
Run Code Online (Sandbox Code Playgroud)
而且只有一条路线:
root / details#index
Run Code Online (Sandbox Code Playgroud)
这篇关于创建非隔离引擎的文章也可能有所帮助。
如果您找到确切答案,请发布。
| 归档时间: |
|
| 查看次数: |
1444 次 |
| 最近记录: |