Rails 3 ActiveRecord每个关联模型的模型总和

时间:2011-07-13 21:00:29

标签: ruby ruby-on-rails-3 activerecord

我有2个模特

Category
- id
- name

Transaction
 - id
 - category_id
 - amount

我想找到每个类别的所有交易的总和。 我知道我可以获得一个caterogies列表,然后使用category_id得到所有交易的总和,但它会做20多个查询。

有没有办法在一个查询中完成所有操作?

编辑:我想最终得到[[category1,sum],[category2,sum]]的列表。

2 个答案:

答案 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}]}