我有以下设置。
Invoice has_many Jobs has_many Tasks belongs_to user
我想获取所有 User
的 Invoice
有任务并汇总他们的数量
class Invoice < ActiveRecord::Base
has_many :jobs
end
class Job < ActiveRecord::Base
belongs_to :invoice
has_many :tasks
end
class Task < ActiveRecord::Base
belongs_to :job
belongs_to :user
end
这是我得到的
@invoice = Invoice.find(params[:id])
jobs = @invoice.jobs.joins(:tasks)
.select('tasks.user_id, (sum(tasks.quantity)*jobs.price) as total')
.group('tasks.user_id, jobs.id')
.order('tasks.user_id')
我明白了,这很接近我想要的
- !ruby/object:Job
attributes:
user_id: '1'
total: '60.00'
- !ruby/object:Job
attributes:
user_id: '1'
total: '50.00'
- !ruby/object:Job
attributes:
user_id: '2'
total: '120.00'
- !ruby/object:Job
attributes:
user_id: '2'
total: '100.00'
我如何按 user_id
对其进行分组并求和总数以便得到类似这样的结果?
user_id: 1
total: 110
user_id: 2
total: 220
最佳答案
感谢您的回答。
我设法用
解决了这个问题user_totals = jobs.to_a.group_by(&:user_id).map{ |user_id,jobs| {:user_id => user_id.to_i, :total => jobs.sum {|j| j.total.to_f} }}
=> [{:user_id=>1, :total=>110.0}, {:user_id=>2, :total=>220.0}]
关于ruby-on-rails - 对数组进行分组并求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15635897/