Маршрутизация с необязательным параметром - PullRequest
55 голосов
/ 02 сентября 2011

Я добавил в файл маршрута:

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

Я также добавил:

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

чтобы показать последнюю книгу без указания года.

Но это не работает, он не может найти маршрут в "show_book / NAME", если я не пройду год.

У вас есть идеи, почему это не работает?

СПАСИБО!

PS. Я знаю, что могу использовать год в качестве параметра с «? Year = XXXX», но я хочу использовать год как часть URL

1 Ответ

103 голосов
/ 02 сентября 2011

Поместите необязательные части в скобки :

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

и удалите второй маршрут.

Обновление

Ответ выше только для рельсов 3 и выше. Инвертирование двух определений маршрутов устранило проблему (см. Комментарий Алессандро ниже).

...