将每日销售额分配到创建日期
Allocate daily sales to date created
我正在尝试收集一周内的所有销售额,并将每笔销售额放在销售额中。如果 Moday 是两次销售,则 Monday => {...}, {...}
等
"Monday" 将是 ruby 的日期格式。
在我的数据库中,我有 5 个销售对象:周一有两个销售对象,周二有两个销售对象。
控制器:
def daily_customer_sale(created)
date_and_id = Sale.where('created_at >= ?', created).pluck(:created_at, :id)
date_and_id.each do |obj|
yield(obj.first, obj.last)
end
end
def daily_sales(created=nil)
sales_by_date = Hash.new(0)
daily_customer_sale(created) do |date, id|
s_date = date.to_date
sales_by_date[s_date] = Sale.find(id) # Seems to return only one object per day
end
return sales_by_date
end
浏览量:
daily_sales(1.week.ago.to_datetime)
我在两个日期(正确)中得到的结果,其中每个数据只有一个对象,而每个日期应该有两个或更多个对象。有什么问题吗?
你不需要复杂的逻辑来做到这一点。这是一个更简洁的方法
Sale.where('created_at >= ?', created_at).group_by{ |sale| sale.created_at.to_date}
它将return所有销售额按天分组。
key
将是日期对象,并且每一天都会有包含当天所有销售额的销售数组。
如果您需要基于 string
的密钥,您可以按照以下格式随意格式化它
Sale.where('created_at >= ?', created_at).group_by{ |sale| sale.created_at.to_date.to_s } #default date format
Sale.where('created_at >= ?', created_at).group_by{ |sale| sale.created_at.to_date.strftime("%d/%m/%Y") } #23/09/2016
你可以看看Group by方法
我正在尝试收集一周内的所有销售额,并将每笔销售额放在销售额中。如果 Moday 是两次销售,则 Monday => {...}, {...}
等
"Monday" 将是 ruby 的日期格式。
在我的数据库中,我有 5 个销售对象:周一有两个销售对象,周二有两个销售对象。
控制器:
def daily_customer_sale(created)
date_and_id = Sale.where('created_at >= ?', created).pluck(:created_at, :id)
date_and_id.each do |obj|
yield(obj.first, obj.last)
end
end
def daily_sales(created=nil)
sales_by_date = Hash.new(0)
daily_customer_sale(created) do |date, id|
s_date = date.to_date
sales_by_date[s_date] = Sale.find(id) # Seems to return only one object per day
end
return sales_by_date
end
浏览量:
daily_sales(1.week.ago.to_datetime)
我在两个日期(正确)中得到的结果,其中每个数据只有一个对象,而每个日期应该有两个或更多个对象。有什么问题吗?
你不需要复杂的逻辑来做到这一点。这是一个更简洁的方法
Sale.where('created_at >= ?', created_at).group_by{ |sale| sale.created_at.to_date}
它将return所有销售额按天分组。
key
将是日期对象,并且每一天都会有包含当天所有销售额的销售数组。
如果您需要基于 string
的密钥,您可以按照以下格式随意格式化它
Sale.where('created_at >= ?', created_at).group_by{ |sale| sale.created_at.to_date.to_s } #default date format
Sale.where('created_at >= ?', created_at).group_by{ |sale| sale.created_at.to_date.strftime("%d/%m/%Y") } #23/09/2016
你可以看看Group by方法