【发布时间】:2018-12-07 12:34:39
【问题描述】:
在我的应用程序中,我需要对客户端进行 API 调用以获取有关产品的信息(我通过提供 product_id 来实现)。
他们的 API 一次只允许 1 个ID,这会使工作变得困难很多倍。
要考虑的是多次运行 API-call 并将结果添加到视图中。
我做了一个小测试,将 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'])
感谢任何帮助!
【问题讨论】:
-
你的代码不是总是覆盖产品吗?数据 = JSON.parse(response.body) 产品 = 数据['data']
-
@RicardoJacas 谢谢。是的,它似乎覆盖了所有这些,只选择最后一个
标签: json ruby-on-rails-4 merge