2012-05-02 73 views
3

从Ruby中的URL删除的查询字符串可以做这样的:删除URL的一部分使用Ruby

url.split('?')[0] 

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

有没有更快的方法来做到这一点,即不使用拆分,而是使用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 
+1

我不确定我是否完全理解你的目标。你想在你的控制器请求提取参数吗? – Suborx

+0

这是来自当前请求的URL还是完全任意的URL? –

+0

你需要添加端口如果存在(而不是80): 'new_url =“#{parsed_url.scheme}://#{parsed_url.host}#{parsed_url.port!= 80?(':'+ parsed_url .port}:''}#{parsed_url.path}“' – hammady

回答

0

大概没有需要分割的URL。当您访问此链接,你传递两个参数到后端:

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

试图监测你的日志,你会看到他们,那么你就可以在控制器直接使用它们。

3

可以使用正则表达式

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

#=> "http://www.domain.extension/folder" 
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"