Rails 4:获得所有子项的总和

时间:2014-01-01 20:30:56

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

我有三个模型Customer,Invoice,InvoiceItems。客户has_many发票和发票has_many InvoiceItems。

InvoiceItems的一个属性是“amount”。我想打印每个客户的所有发票总金额。在Rails 4中最有效和最优雅的方法是什么?

1 个答案:

答案 0 :(得分:1)

如果您想在SQL中完全执行此操作,可以使用:

Customer.joins(invoices: :invoice_items).select('customers.id, sum(amount) as total')
  .group('customers.id').each {|ar| puts ar.id, ar.total}

如果您愿意,您当然可以更改selectgroup以使用customers.id以外的内容。

混合方法将是:

Customer.each do |customer|
  total = customer.invoices.inject(0) do |total, invoice|
    total+invoice.invoice_items.sum('amount')
  puts customer.id, total
  end
end