5

Tengo una aplicación Rails a la que intento integrar un motor Rails.¿Cómo anular las rutas de la aplicación Rails desde un motor?

La aplicación host tiene alguna captura todas las rutas:

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

Parece que las rutas del motor se cargan después de la aplicación captura todas las rutas.

/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"} 

Hasta ahora, todo lo que está afectando a los /engine/envs rutas están quedando atrapados por la aplicación atrapar todas las rutas. Sin embargo, veo que la ruta de bloqueo está cargada después del motor y no creo que los atrapen. ¿Alguna forma de anular las rutas de la aplicación?

Respuesta

1

se podría pegarse sus rutas del motor en un método y luego llamar a que, en su aplicación host.

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

y luego en su aplicación de host agregue el método antes de la rutina general 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

Las rutas se utilizan en el orden en que están definidas. Las primeras rutas para leer son la de la aplicación de host y luego la de su motor.

Tan pronto como se encuentre una ruta coincidente, se detiene la búsqueda de una ruta.

Por lo que yo sepa, no hay ninguna manera (puedo estar equivocado sobre esto) para desactivar esta característica distinta para cambiar su "mag

ACTUALIZACIÓN: Por lo que significa que el orden en que se ve en" rake routes" es el orden en que se procesan. tan pronto como se encuentre una ruta coincidente, hay que ir.

Cuestiones relacionadas