2011-09-02 36 views
43

añadí en el archivo de rutas:enrutamiento con un parámetro opcional

map.show_book "/show_book/:name/year/:year", :controller => "book", :action => "show_version" 

También he añadido:

map.show_book "/show_book/:name", :controller => "book", :action => "show_version" 

para mostrar el último libro sin especificar el año.

Pero no funciona, no puede encontrar la ruta en "show_book/NAME" si no paso el año.

¿Tiene algunas ideas de por qué no funciona?

GRACIAS!

PS. sé que puedo usar años como parámetro con, pero desea utilizar el año como parte de la URL

Respuesta

82

Put the optional parts between parenthesis "año = XXXX?":

map.show_book "/show_book/:name(/year/:year)", :controller => "book", :action => "show_version" 

y retire la segunda ruta.

actualización

La respuesta anterior es sólo para los carriles 3 y superiores. Invertir las dos definiciones de ruta corrigió el problema (ver el comentario de Alessandro a continuación).

+0

Guau, esto es muy simple, pero creo que es solo para Rails3. Olvidé especificar que el proyecto está en los rieles 2.3. Pero descubrí que es suficiente usar ambas rutas, pero en el orden correcto (lo escribí en un orden incorrecto). Gracias –

+0

"Solo" ya no es cierto, ya que esto es válido en Rails 4, y probablemente también en futuras versiones. – AlexQueue

+1

¿Hay alguna manera de tener varias partes opcionales en la misma ruta con un orden no especificado? Soa long the lines of ... map.show_book "/ show_book /: name ((/ year /: year) (/ day /: day))" –

Cuestiones relacionadas