Ruby on Rails - объедините несколько JSON-файлов из вызова API - PullRequest
0 голосов
/ 07 декабря 2018

В моем приложении мне нужно сделать API-вызов клиенту, чтобы получить информацию о продукте (я делаю это, передав product_id).

Их API позволяет только 1 IDв то время, которое усложнило бы работу во много раз.

Имеется в виду несколько раз выполнить API-вызов и добавить результаты в представление.

Я провел небольшой тест со слиянием 2 JSON, который работал нормально. Пример:

@products = data_1['data'] + data_2['data']

Это, конечно, делалось вручную и просто.Я подумал, что могу сделать each do для них и запустить код, как показано ниже:

### CONTROLLER
product_id = Array(params[:product_id].split(','))
product_id.each do |id|
    uri = URI.parse("https://website.com/api?product_id=#{id}")

    request = Net::HTTP::Get.new(uri)
    request["Accept"] = "application/json"

    req_options = { use_ssl: uri.scheme == "https", }
    response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
      http.request(request)
    end
    data = JSON.parse(response.body)

    @products = data['data']
end


### VIEW
- @products.each do |product|
  %p= product.name
  %p= product.date

Это не дает мне никакой ошибки, но, на мой взгляд, я вижу только детализа последний product_id param.То же самое с тем, что я вывожу @products = data['data'] из each do.

В отчаянной попытке я тоже попытался с этим безуспешно:

@products = id.as_json.merge(data['data'])

Любая помощь приветствуется!

1 Ответ

0 голосов
/ 08 декабря 2018

Ответ был намного ближе к тому, что я имел в виду.Мне нужно запустить map на самом variable, как показано ниже:

### CONTROLLER
product_id = Array(params[:product_id].split(','))

@products = product_id.map { |id|
  request = Net::HTTP::Get.new(uri)
  request["Accept"] = "application/json"

  req_options = { use_ssl: uri.scheme == "https", }
  response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
    http.request(request)
  end
  data = JSON.parse(response.body)
  data['data']
}

надеюсь, это кому-нибудь поможет:)

...