聚合订单数据 - Ruby on Rails

时间:2016-11-21 15:16:21

标签: ruby-on-rails ruby ruby-on-rails-5

寻找有关Rails 5 API的数据聚合的一些建议。

我们有一个系统,它分解为最简单的组件,有一个产品型号和一个Orders模型。

通过product_order连接表订购has_many产品。

我们正在生成订单电子表格,其中包含带有订单ID,价格和订单备注的摘要页面,然后是每个订单的一个工作簿,其中列出了该订单的各个产品。

我们还需要输出一个摘要页面,其中包含所有产品的汇总清单和每种产品的订购数量,即:

Product Summary Table
---------------------
Name------|-Quantity
--------------------
Product 1 | 10
Product 2 | 20

汇总数据的最佳方法是什么?

谢谢,

麦克

1 个答案:

答案 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模式。