gpt4 book ai didi

ruby-on-rails - 如何从引擎覆盖 Rails 应用程序路由?

转载 作者:行者123 更新时间:2023-12-04 21:50:05 24 4
gpt4 key购买 nike

我有一个 Rails 应用程序,我正在尝试将 Rails 引擎集成到其中。

主机应用程序有一些捕获所有路由:

  # magic urls
match '/' => 'admin/rendering#show'
match '*path/edit' => 'admin/rendering#show', :defaults => { :editing => true }
match '*path' => 'admin/rendering#show'

看起来引擎路由是在应用程序捕获所有路由后加载的。
/sitemap.xml(.:format)                                            {:format=>"xml", :controller=>"admin/sitemaps", :action=>"show"}
/(.:format) {:controller=>"admin/rendering", :action=>"show"}
/*path/edit(.:format) {:controller=>"admin/rendering", :action=>"show"}
/*path {:controller=>"admin/rendering", :action=>"show"}
engine_envs GET /engine/envs/:id(.:format) {:controller=>"engine/envs", :action=>"show"}
PUT /engine/envs/:id(.:format) {:controller=>"engine/envs", :action=>"update"}
jammit /assets/:package.:extension(.:format) {:extension=>/.+/, :controller=>"jammit", :action=>"package"}

到目前为止,一切都在打 /engine/envs应用程序捕获路由捕获所有路由。但是,我看到 Jammit 路线是在引擎之后加载的,我不相信它们会被捕获。有什么方法可以覆盖应用程序路由?

最佳答案

您可以将引擎路由粘贴在一个方法中,然后在您的主机应用程序中调用它。

# engine routes.rb
module ActionDispatch::Routing
class Mapper
def engine_routes
engine_envs GET /engine/envs/:id(.:format)
# ...
end
# ...

然后在您的主机应用程序中,在全能路由之前添加该方法
# host app routes.rb
MyTestApp::Application.routes.draw do
# ...

engine_routes

match '/' => 'admin/rendering#show'
match '*path/edit' => 'admin/rendering#show', :defaults => { :editing => true }
match '*path' => 'admin/rendering#show'
end

关于ruby-on-rails - 如何从引擎覆盖 Rails 应用程序路由?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6310832/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com