2016-09-25 94 views
1

我試圖收集所有在一個星期內做出的銷售,並把每一天的銷售。如果Moday是兩個銷售,那麼Monday => {...}, {...}分配每日銷售創建日期

「星期一」將是紅寶石的日期格式。

在我的分貝中,我有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) 

我在兩個日期(正確),其中每個數據都有的時候,應該是兩個或只有一個對象得到什麼每日更多。有什麼不對?

回答

4

你不需要複雜的邏輯來做到這一點。這是一個更清潔的方式

Sale.where('created_at >= ?', created_at).group_by{ |sale| sale.created_at.to_date} 

它將返回所有的銷售按天分組。 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方法,你可以將其格式化