我有三个模型Customer,Invoice,InvoiceItems。客户has_many发票和发票has_many InvoiceItems。
InvoiceItems的一个属性是“amount”。我想打印每个客户的所有发票总金额。在Rails 4中最有效和最优雅的方法是什么?
答案 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}
如果您愿意,您当然可以更改select
和group
以使用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