2011-09-02 23 views
43

dodałem w pliku trasy:Routing z opcjonalnym parametrem

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

Dodałem też:

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

pokazać najnowszą książkę bez podania roku.

Ale to nie działa, nie można znaleźć trasy w "show_book/NAME", jeśli nie przejdę roku.

Czy masz jakieś pomysły, dlaczego to nie działa?

DZIĘKI!

PS. wiem, że mogę użyć roku jako parametru z, ale chcę użyć roku jako część adresu URL

Odpowiedz

82

Put the optional parts between parenthesis „lat = XXXX?”:

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

i zdjąć drugą trasą.

Aktualizacja

Powyższa odpowiedź jest tylko dla szyn 3 i powyżej. Odwrócenie definicji dwóch tras rozwiązało problem (patrz komentarz Alessandro poniżej).

+0

Wow, to jest bardzo proste, ale myślę, że jest to tylko dla Rails3. Zapomniałem zaznaczyć, że projekt jest w tory 2.3. Ale przekonałem się, że wystarczy użyć obu tras, ale we właściwej kolejności (napisałem to w niewłaściwej kolejności). Dzięki –

+0

"Tylko" nie jest już prawdą, ponieważ jest to poprawne w wersjach Rails 4 i prawdopodobnie również w przyszłości. – AlexQueue

+1

Czy istnieje sposób na umieszczenie wielu opcjonalnych części na tej samej trasie o nieokreślonej kolejności? Długie linie ... map.show_book "/ show_book /: nazwa ((/ rok /: rok) (/ dzień /: dzień))" –

Powiązane problemy