2015-09-12 81 views
-1

我有一個關係總結2列的問題,有記錄,如:如何總結列有活動記錄關係軌

#<RequestProduct id: 26, request_id: 27, product_service_id: 9, quantity: 12, created_at: "2015-09-12 04:58:19", updated_at: "2015-09-12 04:58:19">, 
#<RequestProduct id: 27, request_id: 27, product_service_id: 10, quantity: 11, created_at: "2015-09-12 04:58:19", updated_at: "2015-09-12 04:58:19">, 
#<RequestProduct id: 28, request_id: 27, product_service_id: 11, quantity: 10, created_at: "2015-09-12 04:58:20", updated_at: "2015-09-12 04:58:20"> 

我要總結的模型RequestProduct數量與價格模型ProductService。我試圖用一些方式,但還是失敗了,我用這樣的方式:

@request.request_products.sum("quantity * request_products.product_service.price") 
@request.request_products.sum("quantity * product_service.price") 
@request.request_products.sum("quantity * ?", product_service.price) 

有沒有其他辦法?

+0

什麼是RDBMS? –

回答

0

你需要嘗試是這樣的:

res = @request.request_products.joins(:product_services) 
     .select("sum(request_products.quantity) as quantities, sum(product_services.price * request_products.quantity) as total") 

現在,您可以通過訪問和值:

res.quantities # total quantity 
res.total  # total amount 
0

的一種方法,這使得這個而無形的Rails,是定義視圖在數據庫中加入表格,執行算術運算,甚至可以彙總數字。

通過公開基礎表的相應鍵ID列併爲視圖創建模型(將其標記爲只讀),可以將其視爲常規Rails模型,並將所有複雜度推送到數據庫層。有些開發人員會討厭這個問題,因爲它可能會認爲它將業務邏輯轉移到數據庫層,而他們並不習慣這樣做。另外,僅僅使用它來簡單地連接表和乘數值可能不是一個足夠強大的用例,而贊成的論點可能會變得更強,如果你確實需要聚合。

然而,它並不是複雜的邏輯,Rails級別和系統性能的簡單性可能無法與其他任何方法匹配。