Как хранить данные из каждого, где строки имеют одинаковый идентификатор - PullRequest
0 голосов
/ 06 ноября 2019

Я новичок в разработке рельсов, извините, если не могу хорошо выразить себя.

У меня есть рельсы в каждом цикле:

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_id doubled. Вывод:

round_id: 2 имя_группы: TEST A

round_id: 2 имя_группы: TEST B

Как яМожно ли группировать раунды по идентификатору в каждом цикле и извлекать имя_группы из round_match_teams для каждого идентификатора раунда? Я хотел бы, чтобы мой вывод был:

round_id: 2 team_name [1]: TEST A team_name [2]: TEST B

Ответы [ 2 ]

1 голос
/ 06 ноября 2019

Это должно работать

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 голосов
/ 06 ноября 2019

Я бы справился с этим немного по-другому: я бы обработал данные, чтобы они были в лучшем формате, и создал бы лист из этих данных.

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

Объяснил: я сгенерирую хэш с ключом asround_id и в качестве значения массив, содержащий собранные имена команд. Затем, при добавлении строки, я использую оператор splat (*), чтобы убедиться, что каждое имя команды получит отдельный столбец.

Вы можете даже отсортировать имена команд, если это имеет больше смысла, прежде чем использовать сплат или вместо *teams, использовать что-то вроде teams.sort.join(", "), чтобы объединить все команды в один столбец (если хотите /предпочтительно).

...