Предполагая, что следующая строка параметров состоит из массива хэшей, каков правильный способ отправить их в Rails?

&auth=6db2f8aa0af80748&guest={surname:"Tizio",name:"Caio",type:"A"}&guest={surname:"Cane",name:"Pippo",type:"B"}&guest={surname:"Topo",name:"Giggio",type:"C"}'
-1
Jerome 14 Окт 2018 в 21:17

1 ответ

Лучший ответ

То, как выглядит ваша строка, говорит о том, что речь идет о передаче параметров в строке запроса запроса GET.

Чтобы передать массив хэшей, вы можете использовать этот синтаксис:

&auth=6db2f8aa0af80748&guest[][surname]=Tizio&guest[][name]=Caio&guest[][type]=A&guest[][surname]=Cane&guest[][name]=Pippo&guest[][type]=B&guest[][surname]=Topo&guest[][name]=Giggio&guest[][type]=C

На сервере эта строка интерпретируется как:

>> Parameters: {"auth"=>"6db2f8aa0af80748", "guest"=>[{"surname"=>"Tizio", "name"=>"Caio", "type"=>"A"}, {"surname"=>"Cane", "name"=>"Pippo", "type"=>"B"}, {"surname"=>"Topo", "name"=>"Giggio", "type"=>"C"}]}

При синтаксическом анализе строки запроса Rails интерпретирует guest как массив, поскольку [] следует за guest. guest[][surname] заставляет его создать хеш с ключом surname и добавить его в массив guest. Следующий параметр guest[][name] также интерпретируется как часть хеша, но вместо создания нового хеша он добавит эту пару "ключ-значение" к последнему хешу из guest. Другие параметры будут добавляться к этому хешу до тех пор, пока не будет найден ключ, который уже существует в хеше. В этом случае будет создан и добавлен новый хеш.

1
Ilya Konyukhov 14 Окт 2018 в 19:42