如何从行中具有相同ID的每个存储数据

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

我是Rails开发的新手,如果我不能很好地表达自己,我感到抱歉。

每个周期都有一个轨道:

r.round_matches.each do |m|
  m.round_matches_team.each do |mt|
      sheet.add_row [m.round_id, mt.team_name]
  end
end

每个round_match都有:round_id加倍输出为:

round_id:2队名:TEST A

round_id:2队名:TEST B

我如何在每个周期中按ID进行分组,并为每个相同的round_id从round_match_teams中推断出team_name?我希望我的输出是:

round_id:2队名[1]:测试A队名[2]:测试B

ruby-on-rails arrays ruby each
2个回答
1
投票

这应该工作

r.round_matches.each do |m|
  team_names = m.round_matches_team.map.with_index do |team, index|
    "team_name[#{index + 1}]: #{team.team_name}"
  end.join(' ')
  sheet.add_row ["round_id: #{m.round_id} #{team_names}"]
end

0
投票

我将对此进行一些不同的处理:我将数据处理为更好的格式,然后根据该数据创建工作表。

sheet_data = Hash.new([])
r.round_matches.each do |m|
  m.round_matches_team.each do |mt|
    sheet_data[mt.round_id] << mt.team_name 
  end 
end 
sheet_data.each do |round_id, teams|    
  sheet.add_row [round_id, *teams]
end

解释:我将生成一个散列,其中将round_id作为键,并将包含收集的团队名称的数组作为值。然后,当添加行时,我使用splat-operator(*)来确保每个团队名称将获得一个单独的列。

如果使用splat可能更有意义,您甚至可以对球队名称进行排序,或者代替使用*teams,而使用teams.sort.join(", ")之类的东西将所有球队合并为一列(如果需要/首选)。] >

© www.soinside.com 2019 - 2024. All rights reserved.