Enrutamiento de controlador de espacio de nombres en Rails 3 sin recursos

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

preguntado el 03 de enero de 13 a las 19:01

1 Respuestas

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 or haz tu propia pregunta.