2011-08-01 3 views
1

net/http 라이브러리를 사용할 때 다중 레벨 매개 변수를 POST에 전달하는 방법은 무엇입니까? 작동게시물을 놓을 다중 레벨 매개 변수

예 :

require "net/http" 

http = Net::HTTP.new("localhost", 3000) 
request = Net::HTTP::Post.new("/external/rd") 
request.set_form_data({:name => 'device_rb'}) 
response = http.request(request) 
puts response.body 

하지만 일반적인 레일 표기법은 다음과 같습니다

"device" => {:name => 'device_rb'} 

내가 어떻게 set_form_data 방법이 임베디드 매개 변수를 넣어하는 방법 아무 생각이 없습니다. 어떤 도움이 필요합니까?

감사

답변

1

는 폼 데이터를 게시하는 경우는, 데이터가 x-www-form-urlencoded 형식으로 인코딩 얻을 것이다. 이것은 구조의 중첩이없는 단순한 키/값 형식입니다.

서버에 전달하는 데이터를 중첩하려면 JSON 또는 XML과 같은 형식을 사용해야합니다. 이러한 형식의 페이로드는 set_form_data으로 설정할 수 없습니다.

request.body = payload을 사용하여 설정하십시오. JSON 페이로드를 게시하려면 simple example을 참조하십시오.

+0

정확하지 않습니다. 귀하의 접근 방식을 사용할 때 나는 여전히 서버 로그를 보았습니다 : { "name =" "device_json", "operating_system_id"=> "7", "hash_string"=> "jfsg3k4ovj0j02jv", "user_id"=> 1 "} 다음과 같이보고 싶을 때 {"app "=> {"name "=>"blabla ","device_id "=>"6 ","type_id "=>"1 "} }, "커밋"=> "앱 만들기"} 차이가 나중에 컨트롤러에 있습니다. '@obj.name = params를 [: 이름] [: 떨어지게] 을 obj.smth =의 PARAMS @ ' 내가 사용하려는 : 를'내가 사용하셔야합니다 (및 광산) 방법을 사용 @obj = PARAMS는 [: OBJ] – Mateusz

+0

OK 중첩 값으로 이루어 '@device = { '기기 '=> { "이름"=> "device_json" "operating_system_id"= ""7 ", "hash_string을 "=>"jfsg3k4ovj0j02jv ", "user_id "=>"1 " } } .to_json ' – Mateusz