Enrutamiento de controlador de espacio de nombres en Rails 3 sin recursos
Frecuentes
Visto 907 veces
0
Estoy migrando una aplicación de Rails 2 a Rails 3.
Tenemos varios controladores de espacios de nombres con diferentes espacios de nombres. Como no son RESTfull, no quiero usar el enrutamiento de recursos, en su lugar, me gustaría tener un Rails 2 antiguo como coincide con ':controlador/:acción' que recoge controladores de espacio de nombres.
En mis rutas.rb tengo
# Install the default route as the lowest priority.
match ':controller(/:action(/:id(.:format)))'
match ':controller(/:action(/:id(.:format)))', :controller => /[^\/]+\/[^\/]+/
rutas de rastrillo informes
/:controller(/:action(/:id(.:format))) :controller#:action
/:controller(/:action(/:id(.:format))) (?-mix:[^\/]+\/[^\/]+)#:action
Sigue siendo una solicitud para /config/empresas/index falla
ActionController::RoutingError (No route matches [GET] "/config/companies/index"):
¿Qué estoy haciendo mal? ¿Hay otra forma de obtener rutas con espacios de nombres con segmentos dinámicos? Cuando trato de usar espacio de nombres y partido con un segmento dinámico junto arroja un error.
:controller segment is not allowed within a namespace block
1 Respuestas
0
OK encontré el problema.
Config es una constante reservada en Rails, apunta a RbConfig. Mi condición de coincidencia realmente funciona, pero intenta llamar a RbConfig::CompaniesController que, por supuesto, no existe.
Cuando traté de agregar
match '/:controller(/:action(/:id(.:format)))', :controller => /config\/[^\/]+/
el error fue
ActionController::RoutingError (uninitialized constant RbConfig::CompaniesController)
Solución: cambie el nombre de app/controllers/config -> app/controllers/configuration (y la carpeta de vistas) y agregue una redirección al enrutamiento para manejar los enlaces heredados.
match '/config/*path' => redirect("/configuration/%{path}")
Respondido el 04 de enero de 13 a las 01:01
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas ruby-on-rails-3 rails-routing or haz tu propia pregunta.