Tengo un gancho before_filter en el controlador de aplicaciones de mi aplicación principal que hace algo como: (No solo pone un enlace en el flash, hay un mensaje, pero no es relevante para el pregunta, simplemente accede a la ruta en el método) sin embargoRutas del motor en el Controlador de aplicación
class ApplicationController < ActionController::Base
before_filter :set_link
def set_link
flash[:notice] = items_path
end
end
Esto funciona bien para la aplicación, cuando voy a los controladores para un motor que hice consigo la excepción
No route matches {:controller=>"items", :action=>"index"}
entiendo que cuando están en el motor, las rutas auxiliares son para el motor a menos que prefixe d con main_app
tanto, cambiar el método en el controlador de aplicación a
def set_link
flash[:notice] = main_app.items_path
end
se deshace de la excepción, pero realmente no quiero tener que hacer eso. ¿Hay alguna otra solución para que el motor reconozca las rutas main_app?
EDIT:
Esto también sucede si el diseño de la aplicación llama a ayudantes de ruta. Entonces, si el motor está diseñado para integrarse en el diseño de main_app, este problema también se verá afectado.
¿Qué pasa con 'main_app'? Además de eso, por qué estás introduciendo una dependencia en tu motor desde la aplicación principal, de esta manera tu motor depende de que 'items_path' esté definido en ** cada ** aplicación que lo usa. Esta no es una buena práctica, por lo general debe usar 'main_app.root_path' u otras rutas bien conocidas (por ejemplo, si utiliza el' sign_in_path'). – Fabio
items_path se definiría en la aplicación principal que ya está construida. Y quiero tener el motor montado en algún lugar, pero integrado en el diseño de la aplicación actual. El motor en sí nunca hace referencia a items_path. Solo quiero que las vistas generadas por el motor se coloquen en el cuerpo del diseño de la aplicación. Sin embargo, el diseño de la aplicación necesita acceder a las rutas de main_app – Olives
Esto se debe a la necesidad de que el motor y la aplicación compartan el mismo diseño. De esta forma, cuando un usuario pasa de una página en la aplicación principal a una página en el motor, no hay una diferencia visible entre el diseño. – Olives