json - Ruby on Rails - 组合来自 api 调用的多个 JSON
问题描述
在我的应用程序中,我需要对客户端进行 API 调用以获取有关产品的信息(我通过提供来实现product_id
)。
他们的 API 只允许 1ID
个,这会使工作变得更加困难。
需要考虑的是多次运行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
这不会给我任何错误,但在我看来,我只看到 last 的详细信息product_id param
。如果我搬出@products = data['data']
.each do
在绝望的尝试中,我也尝试了这个但没有运气:
@products = id.as_json.merge(data['data'])
任何帮助表示赞赏!
解决方案
答案更接近我的想法。我需要自己运行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']
}
希望它可以帮助某人:)
推荐阅读
- python - 获取从数组到变量的所有内容
- reactjs - 检查路由是否有效反应路由器
- c# - c# 中的高级元编程是否有一些行业“标准”?
- jenkins - Jenkins 在失败时打印敏感变量
- mapbox - 有什么方法可以为 mapbox 中同一图层上的每个功能在悬停时提供不同的光标样式?
- angular - Angular 9 异步管道和搜索过滤器
- mysql - 迁移到 MySQL 8 后,Hibernate Criteria 查询不适用于日期时间列
- javascript - 在我设置某些状态后尝试将数据从子组件传递到安装上的父组件时出现恒定的无限循环
- methods - 哈希表是否支持与二叉搜索树相同的方法?
- spring-boot - 如何在所有客户端的春季会话空闲时间后重定向到登录页面