2016-11-21 86 views
0

尋找關於Rails 5 API數據聚合的一些建議。聚合訂單數據 - Ruby on Rails

我們已經有一個系統分解爲最簡單的組件,它有一個Products模型和一個Orders模型。

訂單has_many產品通過product_order連接表。

我們正在生成包含訂單ID,價格和訂單備註的彙總頁面的訂單電子表格,然後爲每個訂單生成一個工作簿,其中列出了該訂單的各個產品。

我們還需要輸出包含所有產品的累計名單和每個產品的訂貨數量彙總頁面,即:

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

什麼是最好的方法關於彙總數據?

感謝,

邁克

+0

您可以使用'SELECT product_id,count(*)FROM product_order GROUP BY product_id'查詢來獲取每個產品的數量。 –

回答

0

如果您使用的是API只有我假設你指望JSON響應,在這種情況下,你可以使用Rabl的渲染JSON響應(〜50毫秒 - 100毫秒〜渲染時間)並仍保留MVC模式。在您的控制器中運行查詢,並將它們分配給view-controller之間共享的變量。

@products = Product.all.includes(:product_orders)這將防止未來n+1問題

現在有@products在內存,你可以訪問到相關數據,而無需進入數據庫,並有機會獲得它在你的Rabl的模板裝product_orders

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