如何映射和分组数组

时间:2014-06-18 10:51:04

标签: ruby-on-rails

我正在创建一个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"]]

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:3)

您可以使用下一个代码执行此操作:

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