2012-05-02 113 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"