我从我的模型中获取了一些数据并使用.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 :(得分: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作为默认值。