67 votes

Routage avec un paramètre optionnel

J'ai ajouté dans le fichier de route :

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

J'ai aussi ajouté :

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

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

Mais ça ne marche pas, il ne trouve pas 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

125voto

Benoit Garret Points 8292

Mettez les parties optionnelles entre parenthèses :

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

et supprimez la deuxième route.

Mettre à jour

La réponse ci-dessus ne concerne que les rails 3 et supérieurs. L'inversion des définitions des deux routes a résolu le problème (voir le commentaire d'Alessandro ci-dessous).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X