我有2个模特
Category
- id
- name
和
Transaction
- id
- category_id
- amount
我想找到每个类别的所有交易的总和。 我知道我可以获得一个caterogies列表,然后使用category_id得到所有交易的总和,但它会做20多个查询。
有没有办法在一个查询中完成所有操作?
编辑:我想最终得到[[category1,sum],[category2,sum]]的列表。
答案 0 :(得分:8)
Transaction.group(:category_id).sum(:amount)
这将返回类似于此的哈希:
{CATEGORY_ID => SUM_OF_TRANSACTIONS, ....}
或
{1 => 100.0, 2 => 350.0, etc.}
获取实际的Category
名称:
Transaction.includes(:category).group("categories.name").sum(:amount)
# => {"Category1" => 100.0, ...}
答案 1 :(得分:0)
@category.transactions.sum(:amount)
UPD 1
你可以与Ruby分享一些工作:
Category.includes(:transactions).map{|c| [c.name, c.transactions.inject(0){|sum, t| sum += t.amount}]}