2012-06-13 10 views
5

Estoy escribiendo un Motor Rails 3 montable, y estoy combinando las rutas de mi motor con la aplicación host. Sin embargo, las rutas de la aplicación host tienen prioridad sobre las rutas de mi motor. ¿Hay alguna manera de que pueda anular las rutas de la aplicación host (específicamente la ruta raíz)?Sobrescribir la ruta raíz de la aplicación host de Mountable Engine

Aquí hay rutas de mi motor en my_enging/config/routes.rb:

MyEngine::Engine.routes.draw do 
root :to => "home#index" 
end 

# Mount engine routes to host application 
Rails.application.routes.draw do 
    mount MyEngine::Engine, :at => "/" 
end 

Y aquí está el resultado de rake routes, con la raíz del huésped sentado en la parte superior:

root/welcome#index 
my_engine/MyEngine::Engine 
root/home#index 

Spree es una joya que hace esto, pero No he podido encontrar cómo están implementados esto.

Respuesta

0

Las personas son más propensas a hacer lo opuesto, por lo que no puedo entender por qué lo necesita, porque se supone que se debe prever la posibilidad de anular las rutas del motor. En realidad no tengo una respuesta de cómo forzar el motor para anular vías de aplicación, pero:

Spree es la adición de rutas de forma dinámica a través de alguna manera eval_block, supongo.

Puede omitir root to:, así como todas las rutas no deseadas en su aplicación y, a continuación, surgirán las rutas del motor. No los guardes a los dos. No veo la raíz especificada en su aplicación, pero ¡Acabo de ejecutar un experimento y todo funciona!

W12::Engine.routes.draw do 
    root to: 'details#index' 
end 

MyCarsApplication.routes.draw do 
    mount Common::Engine => "/" 
end 

Y sólo hay una ruta:

root/details#index 

This post about creating not isolated engines también podría ayudar.

Si encontró la respuesta exacta, por favor publíquela.

Cuestiones relacionadas