Rails - 获取当前URL但不包括GET参数

43
4个回答

58

如果您不关心主机名,request.path应该返回您要查找的内容。否则,您可以尝试:

url_for(:only_path => false, :overwrite_params=>nil)

1
我也遇到了递归参数问题,/controller/action?param=1?param=2?param=3,但是 request.path 对我非常有效。 - Justus Romijn
1
以上方法的问题在于,如果同一类型的资源有多个路径(例如对于一个出版物,有些标记为“/news/post-name”,而其他的则是“/blog-name/post-name”),那么你可能会得到错误的路径。 - thekingoftruth
@thekingoftruth 这是正确的,但会使用最高优先级的路由,所以一定要正确排序。 - tadman
@tadman 说得好。然而,有时候在两个路由之间没有优先级--一个模型可以从多个URL访问,这取决于它们的标签。(例如:电影部分、电视部分、喜剧部分等)。在这种情况下,url_for不是可行的解决方案。我会将我找到的解决方案作为单独的答案发布。 - thekingoftruth
1
可以使用“URI”模块解析当前URL,去掉查询,并将其重新发射为替代方案。 - tadman

18

获取不带任何查询参数的请求URL。

def current_url_without_parameters
  request.base_url + request.path
end

12

我使用以下内容:

request.original_url.split('?').first

它不会重新生成路径,因此会精确地给出最终用户在其浏览器中看到的URL,减去查询参数。


不错!同样,request.url.split('?').first 这个更简洁的方法也适用于我。 - Franco
@Franco 我相信 request.url 已经被弃用了,但我不确定。 - thekingoftruth
1
这更灵活,因为它也可以使用request.referrer一起工作。 - steel

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接