2015-10-06 58 views
0

我從我的模型中獲取一些數據並使用.count,因此我得到了一個哈希範圍。我如何從哈希範圍中獲取缺失的日期

where(:created_at => start_date.beginning_of_day..Time.zone.now.end_of_day). 
    group("date(applicants.created_at)").count 

輸出看起來是這樣的:

{"2015-10-06"=>1, "2015-07-09"=>2, "2015-07-13"=>3, "2015-07-14"=>2, "2015-08-14"=>3, "2015-08-27"=>1} 

的問題是,我現在需要填寫的日期和範圍之間的所有失蹤日期的0值。然而,它是一個散列,我努力搜索數據。

到目前爲止,我沒有找到範圍內的日期;永遠。

def dates_chart_series(orders, start_date, end_date) 
    orders_by_day = orders 
    .where(:created_at => start_date.beginning_of_day..Time.zone.now.end_of_day) 
    .group("date(applicants.created_at)") 
    .count 

    puts orders_by_day 

    (start_date.to_date..end_date.to_date).map do |date| 
    puts orders_by_day.select { |key, value| key == date } 
    puts date 
    end.inspect 
end 

上述代碼取自RailsCast,其中返回一個對象(或對象數組)。不是哈希。我試圖用.select來適應它,但我沒有太多的運氣。

任何幫助,將不勝感激。

回答

0
result = (start_date.to_date..end_date.to_date).each_with_object({}) do |date, hash| 
    hash[date] = orders_by_day.fetch(date.to_s, 0) 
end 

應該返回一個新的哈希每個日期作爲一個鍵和0爲默認值,如果日期不存在。

+0

謝謝!雖然每個對象似乎都不起作用,但我已經以: hash = Hash.new (start_date.to_date..end_date.to_date).each do | date | hash [date] = orders_by_day.fetch(date.to_s,0) end –

+0

很酷啊,像往常一樣,我得到了'| hash,date |'的錯誤方法。 –