Как передать массив массивов в GET API в Ruby на Rails - PullRequest
0 голосов
/ 22 марта 2020

Я использую GET API, в настоящее время передаю массив в виде строки:

def fetch_details ids
  url = "#{url}/api/v1/get-info?ids=#{ids.join(',')}"
  response = Net::HTTP.get_response(URI.parse(URI.encode(url)))
  if response.code.to_i == 200
    return Oj.load(response.body)
  else
    return {}
  end
end

На стороне сервера я извлекаю идентификатор из этого метода:

def self.get_details(ids)
    ids = ids.split(",").map {|x| x.gsub( " ", "")}
end

Для каждый идентификатор, я хочу отправить массив UUID:

ids = [100,21,301]
uuids= {["abc","bca"],["Xyz"],["pqr","345"]}

что-то вроде этого

hash=[
       100=>[abc,bca],
       21=>[xyz],
       301=>[pqr,345]
     ]

Конечная точка использует идентификатор и соответствующие UUID для объединения двух таблиц в запросе к базе данных, поэтому я должен быть в состоянии извлечь идентификатор и соответствующий UUID в конце.

Как передать оба эти значения?

1 Ответ

2 голосов
/ 22 марта 2020

Для передачи массива в параметрах в Rails / Rack необходимо добавить скобки к имени и повторить параметр:

/api/v1/get-info?ids[]=1&ids[]=2&ids[]=3

Вы можете использовать Hash#to_query из ActiveSupport для генерации строки запроса:

irb(main):001:0> { ids: [1,2,3] }.to_query
=> "ids%5B%5D=1&ids%5B%5D=2&ids%5B%5D=3" 

Как указано @ 3limin4t0r, вы должны использовать это только для одномерных массивов простых значений, таких как строки и числа.

Для передачи ха sh вы используете скобки, но с ключами в скобках:

/api/v1/get-info?foo[bar]=1&foo[baz]=2

Снова вы можете сгенерировать строку запроса с помощью #to_query:

irb(main):002:0> { foo: { bar: 1, baz: 2 } }.to_query
=> "foo%5Bbar%5D=1&foo%5Bbaz%5D=2"

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...