2015-10-06 60 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 |'的错误方法。 –