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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top