web-dev-qa-db-fra.com

Routage avec un paramètre facultatif

J'ai ajouté dans le fichier d'itinéraire:

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

J'ai également ajouté:

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

pour montrer le dernier livre sans préciser l'année.

Mais cela ne fonctionne pas, il ne peut pas trouver l'itinéraire dans "show_book/NAME" si je ne passe pas l'année.

Avez-vous des idées pourquoi cela ne fonctionne pas?

MERCI !

PS. Je sais que je peux utiliser l'année comme paramètre avec "? Year = XXXX", mais je veux utiliser l'année comme partie de l'URL

56
Alessandro DS

Mettez les parties optionnelles entre parenthèses :

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

et supprimez le deuxième itinéraire.

Mise à jour

La réponse ci-dessus est uniquement pour Rails 3 et plus. L'inversion des deux définitions de routes a résolu le problème (voir le commentaire d'Alessandro ci-dessous).

104
Benoit Garret