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

mar*_*rto 2 ruby activerecord ruby-on-rails-3

我有2个型号

Category
- id
- name
Run Code Online (Sandbox Code Playgroud)

Transaction
 - id
 - category_id
 - amount
Run Code Online (Sandbox Code Playgroud)

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

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

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

Dyl*_*kow 8

Transaction.group(:category_id).sum(:amount)
Run Code Online (Sandbox Code Playgroud)

这将返回类似于此的哈希:

{CATEGORY_ID => SUM_OF_TRANSACTIONS, ....}
Run Code Online (Sandbox Code Playgroud)

要么

{1 => 100.0, 2 => 350.0, etc.}
Run Code Online (Sandbox Code Playgroud)

要获得实际Category名称:

Transaction.includes(:category).group("categories.name").sum(:amount)
# => {"Category1" => 100.0, ...}
Run Code Online (Sandbox Code Playgroud)