我有一个请求发送到一个URL这个代码,我想把它放到链接两个变量:如何在URL中插入变量?
talksList = open('http://yolo.com/?action=cp_list&id=#{variable1}&key=#{variable2}')
但是当我插入我的变量就是这样,这是行不通的。你可以帮我吗 ?
在此先感谢。
我有一个请求发送到一个URL这个代码,我想把它放到链接两个变量:如何在URL中插入变量?
talksList = open('http://yolo.com/?action=cp_list&id=#{variable1}&key=#{variable2}')
但是当我插入我的变量就是这样,这是行不通的。你可以帮我吗 ?
在此先感谢。
这是因为您使用带单引号的字符串。在单引号字符串中,除\\
和\'
之外没有任何内容被替换。
具体来说,插补仅在双引号中的字符串,请尝试
talksList = open("http://yolo.com/?action=cp_list&id=#{variable1}&key=#{variable2}")
正如@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"
它是在进步,但还有另一种问题:我正确设置了两个变量,但是irb表示它们未定义。但是,当我打印它们时,该值是正确的。 – Vinm 2014-09-30 11:39:12
@Vinm这是一个不同的问题,然后问一个不同的问题(经过一些研究)。 – 2014-09-30 11:42:49