Pregunta

Así que tenemos un sistema heredado que rastrea lugares con identificaciones como "Europa / Francia / Paris", y yo estoy construyendo una fachada rieles de convertir esto en URL como http: // foobar / lugares / Europa / Francia /París. Este requisito no es negociable, el número de posibles niveles en ilimitada, y no podemos escapar de las barras.

Configuración de routes.rb para http: // foobar / lugares / Europa es trivial:

map.resources :places

... pero http: // foobar / lugares / Europa / Francia se queja "Ninguna acción respondió a Europa". Probé:

map.connect '/places/:id', :controller => 'places', :action => 'show' 

... pero esto da el mismo resultado, ya que al parecer el: Identificación del finaliza en el primer '/'. ¿Cómo hago que el ID de cubrir cualquier cosa y todo después de los "lugares"?

¿Fue útil?

Solución

Tener un vistazo a la guía de colocación para la documentación completa:

http://guides.rubyonrails.org/routing.html

Específicamente sección "4.9 Ruta englobamiento".

Pero creo que lo que realmente quiere hacer es declarar su ruta como:

map.connect '/places/*id', :controller => 'places', :action => 'index'

Llamado con una URL como

/places/foo/bar/1

Yields a params[:id] => ["foo", "bar", "1"]

Lo que fácilmente se podría (re) se unen con "/" para producir la cadena completa que desea "foo / bar / 1" (es probable que tenga que volver a insertar la barra inicial manualmente.

Esto debería conseguir que ir.

Otros consejos

pellizqué la respuesta de Cody por encima de un poco para llegar a esto:

map.place '/places/*id', :controller => 'places', :action => 'show'
map.connect '/places/*id.:format', :controller => 'places', :action => 'show'

Mediante el uso de map.place en lugar de map.connect, rieles sabe qué recurso nos enfrentamos y place_url generado, ayudantes, etc place_path correctamente.

Ahora, la segunda línea de debe trabajo, pero no gracias al fallo anterior, así que aquí tiene una solución para places_controller.rb que divide manualmente el ID y establece el formato, el impago a XML:

id, suffix = params[:id].join('/').split('.') 
params[:format] = suffix ? suffix : "xml"
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top