【发布时间】: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'
【问题讨论】:
根据以下内容,如何获取 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'
【问题讨论】:
您可以像这样询问URI 对象的path、query 和fragment:
"#{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"
【讨论】:
你要找的方法是request_uri
uri.request_uri
=> "/posts?id=30&limit=5"
如果需要,您可以使用任何您想删除前导 / 的方法。
编辑:要获取# 符号之后的部分,请使用fragment:
[uri.request_uri, uri.fragment].join("#")
=> "/posts?id=30&limit=5#time=1305298413"
【讨论】:
[uri.request_uri, uri.fragment].reject(&:blank?).join("#") 以避免最后不需要的#。
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等子路由