2011-09-02 10 views
43

ho aggiunto nel file percorso:Routing con un parametro opzionale

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

ho anche aggiunto:

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

per mostrare l'ultimo libro senza specificare l'anno.

Ma non funziona, non riesce a trovare il percorso in "show_book/NAME" se non passo l'anno.

Hai qualche idea del perché non funziona?

GRAZIE!

PS. So che posso usare anno come parametro con, ma voglio utilizzare l'anno come parte dell'URL

risposta

82

Put the optional parts between parenthesis "anno = XXXX?":

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

e rimuovere il secondo percorso.

Aggiornamento

La risposta di cui sopra è solo per i binari 3 e superiori. Invertendo le due rotte le definizioni hanno risolto il problema (vedi il commento di Alessandro sotto).

+0

Wow, questo è molto semplice, ma penso che sia solo per Rails3. Ho dimenticato di specificare che il progetto è in binari 2.3. Ma ho scoperto che è sufficiente utilizzare entrambe le rotte, ma in un ordine corretto (l'ho scritto in un ordine errato). Grazie –

+0

"Solo" non è più vero, poiché questo è valido in Rails 4 e probabilmente anche in versioni future. – AlexQueue

+1

C'è un modo per avere più parti opzionali nello stesso percorso con un ordine non specificato? Soa long the lines of ... map.show_book "/ show_book /: nome ((/ anno /: anno) (/ giorno /: giorno))" –