2014-09-30 103 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"