简体   繁体   中英

rails params hash to String:String hash

I am doing an http get using the url http://localhost/add?add_key[0][key]=1234&add_key[0][id]=1. I have a rails app which gives me a neat params hash {"add_key"=>{"0"=>{"key"=>"1234", "id"=>"1"}}. However when I try to post this to a different server using

new_uri = URI.parse("http://10.10.12.1/test") 
res = Net::HTTP.post_form new_uri,params

The server handling the post is seeing this parameter in the request

{"add_key"=>"0key1234id1"}

Looks like post_form requires a String to String hash. So how do I convert the params hash to

{"add_key[0][key]" => "1234", add_key[0][id]" => "1"}

From the fine manual :

post_form(url, params)
Posts HTML form data to the specified URI object. The form data must be provided as a Hash mapping from String to String.

So you're right about what params needs to be.

You could grab the parsed params in your controller:

{"add_key"=>{"0"=>{"key"=>"1234", "id"=>"1"}}

and then recursively pack that back to the flattened format that post_form expects but that would be a lot of pointless busy work. An easy way to do this would be to grab the raw URL and parse it yourself with URI.parse and CGI.parse , something like this in your controller:

u = URI.parse(request.url)
p = CGI.parse(u.query)

That will leave you with {"add_key[0][key]" => "1234", "add_key[0][id]" => "1"} in p and then you can hand that p to Net::HTTP.post_form .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM