2014-04-04 26 views
3

我正在使用mongoid with rails4,我需要根據結果提供圖表(統計信息屏幕),以便我使用下面的代碼。組通過在rails中使用mongoid

@comments_stats = {} 

    comments_data = Comment.where(:created_at.lte => Date.today-10.days).group_by {|d| d.created_at.to_date } 

    comments_data.map{ |a| @comments_stats[a[0].strftime("%d-%m-%y")] = a[1].size} 

它會給像

{ 
"1-1-2014" => 2, 
"3-1-2014" => 1, 
"4-1-2014" => 2, 
"6-1-2014" => 4 

} 

,但我要像下面

{ 
"1-1-2014" => 2, 
"2-1-2014" => 0, 
"3-1-2014" => 1, 
"4-1-2014" => 2, 
"5-1-2014" => 0, 
"6-1-2014" => 4 

} 

任何一個建議如何簡化上面的查詢也。

謝謝 Prasad。

回答

7

你可以嘗試這樣的事情:

@comments_stats = {} 
last_date = Date.today - 10.days 

comments_data = Comment.where(:created_at.lte => last_date).group_by {|d| d.created_at.strftime("%d-%m-%y")} 
first_date = Date.parse(comments_data.keys.min) 

(first_date..last_date).map do |n_date| 
    day = n_date.strftime("%d-%m-%Y") 
    @comments_stats[day] = comments_data[day] ? comments_data[day].size : 0 
end 

我沒有測試過它,所以它可以有一些問題

+0

它也可以使用'select'而不是地圖,以進一步縮小範圍 –