Come ignorare Rails percorsi app da un motore?
-
26-10-2019 - |
Domanda
Ho un'applicazione Rails che sto cercando di integrare un motore di Rails per.
L'applicazione host ha un po 'di cattura tutte le rotte:
# magic urls
match '/' => 'admin/rendering#show'
match '*path/edit' => 'admin/rendering#show', :defaults => { :editing => true }
match '*path' => 'admin/rendering#show'
Sembra che i percorsi del motore vengono caricati dopo l'applicazione cattura tutti i percorsi.
/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"}
Finora, tutto sta colpendo le vie /engine/envs
sono essere scoperti con l'applicazione cattura tutti i percorsi. Comunque vedo che il percorso jammit viene caricato dopo che il motore e non credo che quelli sono essere scoperti. Un modo per ignorare i percorsi app?
Soluzione
Si potrebbe attaccare i percorsi del motore in un metodo e quindi chiamare che nella vostra applicazione host.
# engine routes.rb
module ActionDispatch::Routing
class Mapper
def engine_routes
engine_envs GET /engine/envs/:id(.:format)
# ...
end
# ...
e poi nella vostra applicazione ospite aggiungere il metodo prima che il catch-all percorso
# 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
Altri suggerimenti
Percorsi vengono utilizzati nell'ordine in cui sono definiti. I primi percorsi per essere letto sono quello dell'applicazione host, poi il motore.
Non appena un percorso corrispondente viene trovato, la ricerca di un percorso viene arrestato.
Per quanto ne so, non ci sono nessun modo (posso sbagliarmi su questo) per ignorare questa funzione se non per cambiare il "mag
UPDATE: Quindi questo significa che l'ordine li vedi in "percorsi rake" è l'ordine in cui vengono elaborati. Non appena viene individuato un percorso di corrispondenza, ci si va.