【问题标题】:Routing with an optional parameter带有可选参数的路由
【发布时间】:2023-03-03 21:14:01
【问题描述】:

我在路由文件中添加了:

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 的一部分

【问题讨论】:

    标签: ruby-on-rails routing rails-routing ruby-on-rails-2


    【解决方案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,我提出了一个问题 (stackoverflow.com/questions/29501364/…) 只是想看看线程中是否有人能够阐明一些问题!
    猜你喜欢
    • 2016-10-12
    • 2011-01-09
    • 2013-09-10
    • 1970-01-01
    • 2016-08-01
    • 2013-12-07
    • 2018-04-06
    • 1970-01-01
    相关资源
    最近更新 更多