2011-08-01 88 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來設置它們。另請參閱此simple example以發佈JSON有效內容。

+0

不完全是。當我使用你的方法時,我仍然看到服務器日誌如下: 參數:{「name」=>「device_json」,「operating_system_id」=>「7」,「hash_string」=>「jfsg3k4ovj0j02jv」,「user_id」=> 1「} 當我想看到類似於: 參數:{」app「=> {」name「=>」blabla「,」device_id「=>」6「,」type_id「=>」1「 },「commit」=>「創建應用程序」} 不同之處在於控制器之後。使用您的(和我)的方法,我需要使用: '@obj.name =參數[:名字] @ obj.smth =參數[:SMTH] ' ,我想用: ' @obj = params [:obj]' – Mateusz

+0

OK,用嵌套值完成:'@device = { 「device」=> {name} =>「device_json」, 「operating_system_id」=>「7」, 「hash_string 「=>」jfsg3k4ovj0j02jv「, 」user_id「=>」1「 } } .to_json' – Mateusz