rails params hash to String: Строка hash - PullRequest
0 голосов
/ 26 января 2012

Я делаю http получить с помощью URL http://localhost/add?add_key[0][key]=1234&add_key[0][id]=1. У меня есть приложение rails, которое дает мне аккуратный хэш params {"add_key" => {"0" => {"key" => "1234", "id" => "1"}}. Однако, когда я пытаюсь опубликовать это на другом сервере, используя

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

Сервер, обрабатывающий сообщение, видит этот параметр в запросе

{"add_key"=>"0key1234id1"}

Похоже, что post_form требует хеш от String to String. Так как мне конвертировать хэш параметров в

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

1 Ответ

2 голосов
/ 27 января 2012

Из тонкой инструкции :

post_form (url, params)
Отправляет данные формы HTML в указанный объект URI.Данные формы должны быть предоставлены в виде хэш-преобразования из строки в строку.

Таким образом, вы правы относительно того, каким должно быть params.

Вы можете получить проанализированный params в вашем контроллере:

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

и затем рекурсивно упаковать это обратно в плоский формат, который ожидает post_form, но это будет много бессмысленной занятой работы.Простой способ сделать это - взять необработанный URL-адрес и разобрать его самостоятельно с помощью URI.parse и CGI.parse, что-то вроде этого в вашем контроллере:

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

Это оставит вас с {"add_key[0][key]" => "1234", "add_key[0][id]" => "1"} в p, а затем вы можете передать это p на Net::HTTP.post_form.

...