我有一个视图,显示使用五元素数组来显示一些数字,其中元素与mon,tue,wed,thur,fri相关
[100,200,50,300,200]
通过方法
构建(不是非常干净) def this_weeks_sales
x = self.sales.where(sale_date: (Date.today.beginning_of_week..(Date.today.beginning_of_week + 5)))
.group("DATE(sales.sale_date)").sum("sales.amount").sort.to_h.values.in_groups_of(5,0)[0]
end
如果一天没有销售,则该元素应为'0' 星期五总是有5个元素
我已经进行了一些测试并且它没有按照我的想法运行,如果星期二有100英镑的销售,但星期一没有任何东西,那么我得到阵列[100,0,0,0,0]
而不是预期的{{1}即,本周的第一次销售将始终是元素[0]
我不想改变我的所有观点,如何获得所需的输出?
[0,100,0,0,0]
返回一个哈希,例如,如果周二只有一次销售self.sales.where(sale_date: (Date.today.beginning_of_week..(Date.today.beginning_of_week + 5)))
.group("DATE(sales.sale_date)").sum("sales.amount").sort.to_h
答案 0 :(得分:1)
ETA:您正在进行分组和排序,但随后将已排序的数组转换回哈希并拉出(无序)值。您只需要将其保留为数组并将map
保留为总和:
sales.where(sale_date: Time.zone.now.all_week).group("DATE(sales.sale_date)").sum(:amount).sort_by{|date,sum| date}.map{|date,sum| sum}
编辑2:如果你想为数据库中不存在的日期获得0,你将需要循环所需的日期:
daily_sale_totals = sales.where(sale_date: Date.today.all_week).group("DATE(sales.sale_date)").sum(:amount)
Date.today.all_week.map{|date| daily_sale_totals[date] || 0}