使用Ruby删除URL的一部分

时间:2012-05-02 08:53:42

标签: ruby-on-rails ruby url query-string

从Ruby中的URL中删除查询字符串可以这样做:

url.split('?')[0]

其中 url 是包含查询字符串的完整网址(例如url = http://www.domain.extension/folder?schnoo=schnok&foo=bar)。

有没有更快的方法来实现这一点,即不使用 split ,而是使用Rails?

修改:目标是从http://www.domain.extension/folder?schnoo=schnok&foo=bar重定向到http://www.domain.extension/folder

编辑:我用过:

url = 'http://www.domain.extension/folder?schnoo=schnok&foo=bar'
parsed_url = URI.parse(url)
new_url = parsed_url.scheme+"://"+parsed_url.host+parsed_url.path

4 个答案:

答案 0 :(得分:10)

如果您解析并设置fragment& querynil而不是重建网址。

parsed = URI::parse("http://www.domain.extension/folder?schnoo=schnok&foo=bar#frag")
parsed.fragment = parsed.query = nil
parsed.to_s

# => "http://www.domain.extension/folder"

答案 1 :(得分:6)

 url = 'http://www.domain.extension/folder?schnoo=schnok&foo=bar'
 u = URI.parse(url)
 p = CGI.parse(u.query)
 # p is now {"schnoo"=>["schnok"], "foo"=>["bar"]}

查看:how to get query string from passed url in ruby on rails

答案 2 :(得分:4)

您可以使用Regex获得性能

'http://www.domain.extension/folder?schnoo=schnok&foo=bar'[/[^\?]+/]

#=> "http://www.domain.extension/folder"

答案 3 :(得分:0)

可能不需要拆分网址。当您访问此链接时,您将两个参数传递给后端:

http://www.domain.extension/folder?schnoo=schnok&foo=bar params[:schnoo]=schnok params[:foo]=bar

尝试监控您的日志,您将看到它们,然后您可以直接在控制器中使用它们。