我正在创建一个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"]]
我怎样才能做到这一点?
答案 0 :(得分:3)
您可以使用下一个代码执行此操作:
@reports.group_by { |x| x.date }.map { |date, record|
[date, record.map(&:seconds).map(&:to_i).reduce(:+).to_s]
}