带有可选参数的路由

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/…) 只是想看看线程中是否有人能够阐明一些问题!

以上是关于带有可选参数的路由的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 React 路由器设置带有可选查询参数的路由?

带有可选参数和 ajax 调用的 Laravel 路由

带有可选参数的web api路由

angularjs 路由可以有可选的参数值吗?

带有可选路径参数的简单 React 路由器给出“TypeError:无法读取未定义的属性“过滤器”

可选的反应路由器参数标记 GET 请求错误?