如何输出带有哈希数组的动态表

问题描述 投票:0回答:1

过去两天让我发疯。

{{:id=>1, :name=>"Brown, James", :completed_at=>"2020-03-01"}=>{:count=>5},
 {:id=>2, :name=>"Allen, John", :completed_at=>"2020-03-01"}=>{:count=>6},
 {:id=>1, :name=>"Brown, James", :completed_at=>"2020-03-03"}=>{:count=>6},
 {:id=>3, :name=>"Davis, Carl", :completed_at=>"2020-03-04"}=>{:count=>10}}

我拥有从ActiveRecord查询中获得的数据,并且以一种每天可以计算用户完成的任务数量的方式进行映射。用户基本上选择一个月和一年,例如2020年3月,它从该月初和月末开始计算每个用户的任务。

我想要实现的是一个表格,看起来像我在下面上传的图像:

Table

我已经尝试了多种方法,例如将名称和日期放入一个完全独立的数组中,并尝试根据条件进行输出,但我似乎无法使其正常工作。请注意,表头基于给定的日期是动态的。任何帮助将不胜感激!

ruby-on-rails ruby haml
1个回答
0
投票

因此,您可以通过这种方式进行操作(这只是使它适合您的需要的示例)

obj = {
  {:id=>1, :name=>"Brown, James", :completed_at=>"2020-03-01"}=>{:count=>5},
  {:id=>2, :name=>"Allen, John", :completed_at=>"2020-03-01"}=>{:count=>6},
  {:id=>1, :name=>"Brown, James", :completed_at=>"2020-03-03"}=>{:count=>6},
  {:id=>3, :name=>"Davis, Carl", :completed_at=>"2020-03-04"}=>{:count=>10}
}
columns = obj.map { |k, _v| k[:completed_at] }.uniq
strokes = obj.map { |k, _v| { id: k[:id], name: k[:name] } }.uniq

result = []

result.push('name')
columns.each do |c|
  result.push(c)
end

strokes.each do |stroke|
  result.push(s[:name])
  columns.each do |column|
    cell = obj.find do |k, _v|
      k[:id] == stroke[:id] && k[:completed_at] == column
    end
    result.push(cell&.last.try(:[], :count))
  end
end

结果将是

[
  "name", "2020-03-01", "2020-03-03", "2020-03-04", 
  "Brown, James", 5, 6, nil, 
  "Allen, John", 6, nil, nil, 
  "Davis, Carl", nil, nil, 10
]
© www.soinside.com 2019 - 2024. All rights reserved.