2014-10-31 16 views
0

我是新來的鐵軌。如何使用來自其他模型的值對記錄進行排名?

有這個問題。我有兩個型號客戶訂單客戶 has_many 訂單訂單 belongs_to 客戶。每個訂單都有一個貨幣值:成本

現在我怎麼能通過總共成本對所有客戶進行排名?

非常感謝您的幫助!

+0

從理論上講,這可以在SQL來實現:每個'Customer'你獲取上確定的金額相關訂單中的字段以及該字段的順序。但它會很慢,這是肯定的。你有沒有考慮在**客戶模型中緩存總訂單成本**並按緩存值進行排序? – 2014-10-31 20:12:57

+0

'Customer.joins(:orders).order('orders.cost desc')' – juanpastas 2014-10-31 20:16:17

+0

大謝謝你們倆! – 2014-10-31 20:20:06

回答

0

,你可以這樣做下面

Customer.joins(:orders).select('customers.id, sum(orders.cost) as total_order_cost').order("total_order_cost") 

使用order("total_order_cost desc")如果你想按降序排列

+0

謝謝!這對我有很大的幫助。返回多個記錄,我必須在最後添加'.group(「customers.id」)'。 – 2014-10-31 22:04:25

相關問題