我是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
这应该工作
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
我将对此进行一些不同的处理:我将数据处理为更好的格式,然后根据该数据创建工作表。
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(", ")
之类的东西将所有球队合并为一列(如果需要/首选)。] >