5

我有一個Rails應用程序,我試圖將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路線越來越被應用程序捕獲捕獲所有路線。但是我發現發動機後裝載了發動機,我不相信這些發動機會被抓到。任何方式來覆蓋應用程序路線?

回答

1

你可以堅持你的引擎路線的方法,然後調用,在你的主機應用程序。

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

然後在您的主機應用程序中添加該方法之前的捕獲所有的rou te

# 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 
0

路由按其定義的順序使用。要讀取的第一個路由是主機應用程序之一,然後是您的引擎。

只要找到匹配的路線,就停止搜索路線。

據我所知,有沒有辦法(我可能是錯關於這一點)來覆蓋除了改變你的這個功能「MAG

更新:所以這意味着,爲了你看到他們在」耙路線」是他們的處理順序。只要匹配的路由時,你去那裏。

相關問題