按日期映射rails集合

时间:2015-07-21 13:01:08

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

我有员工模型和销售模式,员工有很多销售。我想拉每个员工的每周销售额, 到目前为止,我可以获得每个员工当周所有销售的集合;

def weekly_sales
    self.sales.where(created_at: (Date.today.beginning_of_week..(Date.today.beginning_of_week + 5)))
end

给出;

<ActiveRecord::AssociationRelation [#<Sale id: 1054, amount: 2668, new_sale: true, created_at: "2015-07-21 00:00:00", updated_at: "2015-07-21 11:48:03", employee_id: 17>, #<Sale id: 1053, amount: 7128, new_sale: false, created_at: "2015-07-21 00:00:00", updated_at: "2015-07-21 11:48:03", employee_id: 17>, #<Sale id: 1052, amount: 4781, new_sale: true, created_at: "2015-07-20 00:00:00", updated_at: "2015-07-21 11:48:03", employee_id: 17>, #<Sale id: 1051, amount: 4491, new_sale: true, created_at: "2015-07-20 00:00:00", updated_at: "2015-07-21 11:48:03", employee_id: 17>]>

我想最终得到一个包含5个元素的数组,每个元素是星期一到星期五每天的sale.amount总数,但我不确定如何正确构建它。 周二的Runninng每周销售将给出一个5元素阵列,例如[350,290,0,0,0]

2 个答案:

答案 0 :(得分:0)

这将为您提供一个哈希值,其中日期为键,值为这个日期的销售总和(它只对数据库进行一次查询):

def weekly_sales
  sales.group("DATE(created_at)").count
end

获取按日期分组的所有销售总额:

def weekly_sales
  sales.group("DATE(created_at)").sum(:amount)
end

答案 1 :(得分:0)

我希望这个会给你你想要的输出

def weekly_sales
  self.sales.where(created_at: (Date.today.beginning_of_week..(Date.today.beginning_of_week + 5))).group("DATE(sales.created_at)").sum("sales.amount")
end