【问题标题】:Ruby URI - How to get entire path after URLRuby URI - 如何在 URL 之后获取整个路径
【发布时间】:2015-11-24 10:03:27
【问题描述】:

根据以下内容,如何获取 URL 的完整路径

uri = URI("http://foo.com/posts?id=30&limit=5#time=1305298413")

我只想要posts?id=30&limit=5#time=1305298413

我尝试了 uri.path,它返回 /posts,而 ui.query 返回 'id=30&limit=5'

【问题讨论】:

    标签: ruby parsing uri


    【解决方案1】:

    您可以像这样询问URI 对象的pathqueryfragment

    "#{uri.path}?#{uri.query}##{uri.fragment}"
    # => "/posts?id=30&limit=5#time=1305298413"
    

    或者(更简洁一点,但不那么明确):

    "#{uri.request_uri}##{uri.fragment}"
    # => "/posts?id=30&limit=5#time=1305298413"
    

    【讨论】:

      【解决方案2】:

      你要找的方法是request_uri

      uri.request_uri
      => "/posts?id=30&limit=5"
      

      如果需要,您可以使用任何您想删除前导 / 的方法。

      编辑:要获取# 符号之后的部分,请使用fragment

      [uri.request_uri, uri.fragment].join("#")
      => "/posts?id=30&limit=5#time=1305298413"
      

      【讨论】:

      • 谢谢。但是,这是缺少#time=1305298413
      • 我会[uri.request_uri, uri.fragment].reject(&:blank?).join("#") 以避免最后不需要的#。
      • 在 uri 来自 web 请求的通常情况下,片段不会发送到服务器 BTW
      【解决方案3】:
      File.basename("http://foo.com/posts?id=30&limit=5#time=1305298413")
      # => "posts?id=30&limit=5#time=1305298413"
      

      【讨论】:

      • 不适用于http://foo.com/posts/likes?id=30&limit=5#time=1305298413等子路由
      猜你喜欢
      • 1970-01-01
      • 2011-05-02
      • 2010-10-24
      • 2012-10-23
      • 1970-01-01
      • 1970-01-01
      • 2020-04-13
      • 1970-01-01
      • 2018-07-05
      相关资源
      最近更新 更多