带有可选参数的路由
Posted
技术标签:
【中文标题】带有可选参数的路由【英文标题】:Routing with an optional parameter 【发布时间】:2011-11-09 01:02:07 【问题描述】:我在路由文件中添加了:
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】:Put the optional parts between parenthesis:
map.show_book "/show_book/:name(/year/:year)", :controller => "book", :action => "show_version"
并删除第二条路线。
更新
以上答案仅适用于rails 3及以上。颠倒两个路由定义解决了这个问题(见下面亚历山德罗的评论)。
【讨论】:
哇,这很简单,但我认为它只适用于Rails3。我忘了指定项目在 rails 2.3 中。但我发现使用这两条路线就足够了,但顺序正确(我写的顺序错误)。谢谢 "Only" 不再正确,因为这在 Rails 4 中有效,并且可能在未来的版本中也是如此。 有没有办法在同一条路线中以未指定的顺序有多个可选部分?排长队... map.show_book "/show_book/:name((/year/:year)(/day/:day))" @EricWalsh 你应该问这个问题,你更有可能得到答案(很久没碰铁轨了,我不会有太大用处)跨度> 感谢@BenoitGarret,我提出了一个问题 (***.com/questions/29501364/…) 只是想看看线程中是否有人能够阐明一些问题!以上是关于带有可选参数的路由的主要内容,如果未能解决你的问题,请参考以下文章