【问题标题】:Routing - why permalink "john.green" doesn't work?路由 - 为什么永久链接“john.green”不起作用?
【发布时间】:2012-04-11 21:06:57
【问题描述】:

routes.rb我已经设置了

匹配 "member/:permalink" => "accounts#profile"

当用户的 url 名称为 john-greenjohn_greenjohngreen 时,一切正常,但当 url 名称为 john.green 时,因为固定链接仅采用第一部分 - john 具体来说,从 Rails 调试窗口:

Request

Parameters:

{"permalink"=>"john",
 "format"=>"green"}

为什么不接受永久链接中的.(点)?存在使用它的任何功能吗? 编辑当我使用时

  match "member/:permalink" => "accounts#profile", 
        :requirements       => { :permalink => /.+/ }

我明白了

{"requirements"=>{"permalink"=>/.+/},
 "permalink"=>"john",
 "format"=>"green"}

【问题讨论】:

    标签: ruby-on-rails-3 url routes permalinks


    【解决方案1】:

    默认情况下,Rails 将点之后的所有内容都视为一种格式,并且看起来没有简单的方法可以覆盖这种行为。但是有一个使用 :requirements 选项的有点肮脏的解决方法:

    match 'member/:permalink' => 'accounts#profile', 
          :constraints        => { :permalink => /.+/ }
    

    通过为:permalink 参数添加贪婪正则表达式,您可以让Rails 将路径中member/ 子字符串之后找到的所有内容传递到params[:permalink]

    【讨论】:

    • 感谢您的回复,可惜url名称还是分了两部分(我更新了我的原帖)
    • 对不起,我的错误。它应该是constraints,而不是requirements。更新并测试了答案 - 在 Rails 3.2.3 上对我来说很好。
    猜你喜欢
    • 1970-01-01
    • 2011-05-18
    • 2015-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多