2016-11-04 125 views
1

我試圖從傳遞的URL中獲取變量prop的查詢字符串的值,該查詢字符串與this線程中的紳士所做的相似。從提取URL獲取查詢字符串(如果存在)

它的工作原理是如果URL中有一個查詢字符串,但如果沒有,我會得到 CGI.parse undefined method 'split' for nil:NilClass錯誤。我做了研究,問題是因爲沒有查詢要拆分。

所以我的問題是如何測試任何查詢字符串的存在,然後通過CGI.parse運行它,看看prop查詢字符串是否是其中之一?我想我可以通過Regex來完成,但我希望有一個Rails解決方案。

任何幫助,將不勝感激。

感謝名單

代碼: 我也試圖讓URL引用的域名。這就是爲什麼我在那裏有這個變量。

url = request.env['HTTP_REFERER'] 
encoded_url = URI.encode(url.to_s) 
parse = URI.parse(encoded_url) 
domain = parse.host 
puts domain 
params = CGI.parse(parse.query) 
puts params['prop'].first 

UPDATE: 我得到了錯誤通過添加附加的代碼消失。但我仍然想知道是否有更好的Rails解決方案。我對Rails還是比較新的,所以我想確保我正確地做到了。

if encoded_url.include? "?prop" 
    params = CGI.parse(parse.query) 
    puts params['prop'].first 
end 
+1

你確定你已經通過了rails教程嗎?這是最基本的事情之一。每個請求都與哪個HTTP動詞有一個'params'哈希無關,您可以在控制器中使用它來獲取所需密鑰的值。然後將它與'.present?'方法結合起來if123其他 –

+0

哦,我認爲params散列只能在Rails URL中訪問。我不知道它也可用於外部URL。我遇到了與我的類似的SO問題,所以這也是導致我相信的原因。但它確實有意義,它可以在任何情況下都有效。感謝名單。 –

+0

讓我知道這是否適合你:) –

回答

2

在一個URL查詢字符串的按鍵可以使用params[]哈希進行訪問,即使網址不存在應用程序本身的內部。這也是軌道與外界溝通的方便方式。請注意,Rails在使用params[]散列時平等對待所有HTTP動詞。
用法:puts params[:your_key]