ruby-on-rails - 对数组进行分组并求和

标签 ruby-on-rails ruby

我有以下设置。

Invoice has_many Jobs has_many Tasks belongs_to user

我想获取所有 UserInvoice 有任务并汇总他们的数量

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/

相关文章:

ruby-on-rails - 是什么让 heroku 响应时间太慢

ruby - ruby 中的适配器模式 : Accessing Your Instance Variables

ruby-on-rails - 为什么 Ruby 将日期类型中的 'foo' 解析为 01.01.1970

javascript - Rails 5 : javascript preview and remove image, 水平对齐预览图片

ruby-on-rails - 连接在docker-compose上分别运行的两个应用程序

ruby-on-rails - ActionController::RoutingError(没有路由匹配 [GET] "/serviceworker.js"):

ruby-on-rails - 找不到 HTML2HAML 命令

ruby-on-rails - Rails - 请求被视为 HTML 而不是 json

ruby - self.element = 'this' 和 self.send ("element="、 'this' 之间的区别)

ruby-on-rails - 安装rails时出错