2014-09-30 2 views
-1

가 나는 URL로 요청을 보내이 코드를 가지고 있고, 나는 URL을 두 변수에 배치하고 싶었 :URL에 변수를 삽입하는 방법은 무엇입니까?

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

을하지만이처럼 내 변수를 삽입 할 때, 그것은 작동하지 않습니다. 너 나 좀 도와 줄 수있어?

미리 감사드립니다.

답변

0

작은 따옴표로 묶어서 사용하기 때문입니다. 작은 따옴표로 묶인 문자열에서는 \\\'을 제외하고는 아무 것도 대체되지 않습니다.

특히, 보간 @YuHao 말했듯이, 당신은 비 해석 문자열로 변수를 보간하기 위해 노력하고

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

그것은 진행하지만, 또 다른이 문제 : 두 변수를 올바르게 설정했지만 irb는 변수가 정의되지 않았다고 말합니다. 그러나 인쇄 할 때 값이 정확합니다. – Vinm

+0

@Vinm 다른 문제입니다. 그런 다음 다른 질문을하십시오 (일부 조사 후). –

1

시도를 두 번 인용 문자열에서만 사용할 수 있습니다. 하지만 장기적인 문제는 더 커집니다.

인코딩되지 않은 변수를 URL에 삽입하지 마십시오. 작동하는 동안, 당신은 브라우저가 받아들이는 무의미한 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" 
관련 문제