Ruby on Rails - 合并来自 api 调用的多个 JSON

Ruby on Rails - Combine several JSONs from api call

在我的应用程序中,我需要对客户进行 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'])

感谢任何帮助!

答案和我的想法更接近了。我需要在 variable 本身上 运行 map,如下所示:

### 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']
}

希望对大家有所帮助:)