2014-06-18 113 views
1

我正在創建一個Rails 3.2 web應用程序,並在此應用程序中收集和顯示時間報告。 我有一個查詢,看起來像這樣:哪些輸出該如何映射和分組數組

@reports = Timereport.where("backend_user_id = ?", user.id).group("id, date(created_at)").created_between(from, to).order("date(created_at) desc").select("id, date (created_at) as date, sum(total_time) as seconds") 

[#<Timereport id: 370>, #<Timereport id: 367>, #<Timereport id: 368>, #<Timereport id: 369>] 

每個對象都包含日期和秒的可以這樣訪問:

<% @reports.each do |report| %> 
<%= report[:date] %> 
<%= report[:seconds] %> 
<% end %> 

我真正需要做的就是按天分組以獲得每天的總秒數:

我試過這個:

<% output = @reports.map { |f| [f.date, f.seconds] } %> 

這給了我這個結果日期是單獨的。我需要將日期分組,以便我可以獲得每天的總秒數。

[["2014-06-18", "3600"], ["2014-06-17", "3600"], ["2014-06-17", "3600"], ["2014-06-17", "3600"]] 

換句話說。我需要這個結果:

[["2014-06-18", "3600"], ["2014-06-17", "10800"]] 

我該如何做到這一點?

回答

2

你可以用下面的代碼做到這一點:

@reports.group_by { |x| x.date }.map { |date, record| 
    [date, record.map(&:seconds).map(&:to_i).reduce(:+).to_s] 
} 
+1

這工作完全正常!謝謝! –