2017-02-03 67 views
2

無法將SQL查詢轉換爲ActiveRecord。這裏是我的域模型的簡化版本:選擇活動記錄中分組行的總和

用戶#的has_many:籃

籃#日期:日期,USER_ID:整數 - 有很多:line_items,belongs_to的:用戶

的LineItem#數量:整數 - belongs_to的:籃

我可以做的SQL以下查詢:

SELECT baskets.date, SUM(line_items.quantity) from baskets 
INNER JOIN line_items ON line_items.basket_id = basket.id 
WHERE baskets.user_id = 2 
GROUP BY baskets.id 
ORDER BY baskets.date DESC 

當運行在pgAdmin的這個查詢,我得到的兩列我想要:購物籃日期以及與該特定購物籃相關的所有line_item數量的總和。

然而,當我嘗試撰寫相同數據一個ActiveRecord查詢:

User.find(2).baskets 
    .select('baskets.date,'SUM(line_items.quantity)') 
    .joins(:line_items) 
    .group('baskets.id') 
    .order('baskets.date desc') 

它返回籃下日期,而不是分組LINE_ITEM量的總和。理想情況下,我希望得到以下格式的結果,例如{date => quantity,date => quantity ...},但不知道如何到達那裏。

回答

1

單引號搞亂這件事對你來說,這應該工作

User.find(2).baskets 
    .joins(:line_items) 
    .group('baskets.id') 
    .order('baskets.date desc') 
    .select("baskets.date, sum(line_items.quantity) as quantity_sum") 

您還可以使用pluck這將返回日期的數組,並總結

User.find(2).baskets 
    .joins(:line_items) 
    .group('baskets.id') 
    .order('baskets.date desc') 
    .pluck("baskets.date, sum(line_items.quantity) as quantity_sum") 
+1

真棒。總是小事。並且很高興知道拔羽!謝謝。 – user7280963