2017-02-03 60 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