使用可选参数进行路由

Ale*_* DS 56 routing ruby-on-rails rails-routing ruby-on-rails-2

我在路径文件中添加了:

map.show_book "/show_book/:name/year/:year", :controller => "book", :action => "show_version"
Run Code Online (Sandbox Code Playgroud)

我还补充说:

map.show_book "/show_book/:name", :controller => "book", :action => "show_version"
Run Code Online (Sandbox Code Playgroud)

显示最新的书而不指定年份.

但它不起作用,如果我没有过年,它就无法在"show_book/NAME"中找到路线.

你有一些想法为什么它不起作用?

谢谢 !

PS.我知道我可以使用year作为"?year = XXXX"的参数,但我想将年份用作URL的一部分

Ben*_*ret 108

将可选部分放在括号之间:

map.show_book "/show_book/:name(/year/:year)", :controller => "book", :action => "show_version"
Run Code Online (Sandbox Code Playgroud)

并删除第二个路线.

更新

以上答案仅适用于轨道3及以上.反转两个路线定义解决了问题(参见下面的亚历山德罗的评论).