寻找有关Rails 5 API的数据聚合的一些建议。
我们有一个系统,它分解为最简单的组件,有一个产品型号和一个Orders模型。
通过product_order连接表订购has_many产品。
我们正在生成订单电子表格,其中包含带有订单ID,价格和订单备注的摘要页面,然后是每个订单的一个工作簿,其中列出了该订单的各个产品。
我们还需要输出一个摘要页面,其中包含所有产品的汇总清单和每种产品的订购数量,即:
Product Summary Table
---------------------
Name------|-Quantity
--------------------
Product 1 | 10
Product 2 | 20
等
汇总数据的最佳方法是什么?
谢谢,
麦克
答案 0 :(得分:0)
如果您只使用API,我假设您期望获得JSON响应,在这种情况下,您可以使用RABL呈现JSON响应(渲染时间约为50毫秒 - 约100毫秒)并仍然保留MVC模式。在控制器中运行查询并将它们分配给view-controller之间共享的变量。
@products = Product.all.includes(:product_orders)
这将阻止未来的n+1
问题
现在,在内存中加载了@products
product_orders
,您可以访问相关数据而无需访问数据库,并可以在RABL模板中访问它。
Rabl的:
object false
node :products do
@products.each do |p|
id: p.id,
count: p.product_orders.count
end
end
在此模板中,count: p.product_orders.count
将无法访问数据库,因为您已将所有product_orders
提取到内存中。
现在回复如下:
"products": [
{
id: 1,
count: 20
},
{
id: 2,
count: 21
},
...
]
这是我对API的关注,因为它尊重MVC模式。