将SQL查询转换为ActiveRecord时遇到问题。这是我的域建模的简化版本:
用户#has_many:baskets
购物篮#date:date,user_id:integer - 有很多:line_items,belongs_to:user
LineItem#quantity:integer - belongs_to:basket
我可以在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 ...},但不知道如何到达那里。
答案 0 :(得分:6)
单引号搞砸了这个,这应该可行
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")