2014-09-30 111 views
-1

我有一個請求發送到一個URL這個代碼,我想把它放到鏈接兩個變量:如何在URL中插入變量?

talksList = open('http://yolo.com/?action=cp_list&id=#{variable1}&key=#{variable2}') 

但是當我插入我的變量就是這樣,這是行不通的。你可以幫我嗎 ?

在此先感謝。

回答

0

這是因爲您使用帶單引號的字符串。在單引號字符串中,除\\\'之外沒有任何內容被替換。

具體來說,插補僅在雙引號中的字符串,請嘗試

talksList = open("http://yolo.com/?action=cp_list&id=#{variable1}&key=#{variable2}") 
+0

它是在進步,但還有另一種問題:我正確設置了兩個變量,但是irb表示它們未定義。但是,當我打印它們時,該值是正確的。 – Vinm 2014-09-30 11:39:12

+0

@Vinm這是一個不同的問題,然後問一個不同的問題(經過一些研究)。 – 2014-09-30 11:42:49

1

正如@YuHao說,你想給一個變量插值到非解釋字符串。但是你有更大的長期問題。

不要嘗試將未編碼的變量注入到URL中。雖然它可以工作,但是你冒着生成無意義的URL的風險,瀏覽器可以接受,但代碼不會。相反,請使用適當的工具來修改網址,以便爲您保留適當的編碼。

下面是一個使用URI一個例子:

require 'uri' 

variable1 = 'foo' 
variable2 = 'bar' 

uri = URI.parse('http://yolo.com/?action=cp_list') 
params = URI.decode_www_form(uri.query) 
params << ['id', variable1] 
params << ['key', variable2] 
uri.query = URI.encode_www_form(params) 
uri.to_s # => "http://yolo.com/?action=cp_list&id=foo&key=bar" 

你可以使用Addressable的寶石,這是一回事功能更全面:

require 'addressable/uri' 

variable1 = 'foo' 
variable2 = 'bar' 

uri = Addressable::URI.parse('http://yolo.com/?action=cp_list') 
params = uri.query_values 
uri.query_values = params.merge('id' => variable1, 'key' => variable2) 
uri.to_s # => "http://yolo.com/?action=cp_list&id=foo&key=bar"