2015-07-21 46 views
0

我有员工模型和销售模型,员工has_many销售。我想为每个员工提供每周销售额, 到目前为止,我可以为每个员工获得本周所有销售额的收集;按日期排列栏杆集合

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]

+0

摹:: UndefinedFunction:错误:函数sum(时间戳无时区)不存在 LINE 1:SELECT SUM(sales.created_at)FROM “销售” WHERE “销售”,“EMP ... ^ 提示:没有函数匹配给定的名称和参数类型。您可能需要添加显式类型转换。 :SELECT SUM(sales.created_at)FROM“sales”WHERE“sales”。“employee_id”= $ 1 AND(“sales”。“created_at”BETWEEN'2015-07-20'AND'2015-07-25') ActiveRecord :: StatementInvalid:PG :: UndefinedFunction:错误:函数sum(没有时区的时间戳)不存在 –

回答

0

这会给你一个散列,日期作为关键字和值,它们是销售总和日期(它仅仅一个查询到DB):

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

要获得全部销售额的总和,按日期分组:

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

这只计算记录数而不是值 –

+0

抱歉,错过了,在阅读问题时。我确定了答案 –

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