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
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).