按日期映射rails集合



我有一个员工模型和一个销售模型,一个员工有_many sales。我想拉出每个员工每周的销售额,到目前为止,我可以得到每个员工当周所有销售额的集合;

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。周一到周五每天的总金额,但我不确定如何正确地建立它。在星期二运行每周销售将得到一个5个元素的数组,例如[350,290,0,0,0]

这将为您提供一个散列,以日期作为键和值,这些值是该日期的销售额之和(并且它只对数据库进行一次查询):

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

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

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

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

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

最新更新