Допустим, у меня есть массив объектов Match, каждый из которых принадлежит раунду в структуре кругового турнира...
Совпадения
Round | Registrant_ID |Registrant_ID_2 |Winner_id
1 | 1 | 2 | 2
1 | 3 | 4 | 4
1 | 5 | 6 | 5
1 | 7 | 8 | 8
2 | 1 | 4 | 1
2 | 3 | 6 | 3
2 | 5 | 8 | 5
2 | 7 | 2 | 2
3 | 1 | 6 | 1
...
Что я хочу сделать, так это сгруппировать все совпадения по раундам, прокрутить этот раунд и перечислить совпадения.
Желаемый результат будет примерно таким...
<h1>Round 1</h1>
<table>
<thead>
<tr>
<th>Player 1</th>
<th>Player 2</th>
<th>Winner</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>2</td>
<td>2</td>
</tr>
<tr>
<td>3</td>
<td>4</td>
<td>4</td>
</tr>
<tr>
<td>5</td>
<td>6</td>
<td>5</td>
</tr>
<tr>
<td>7</td>
<td>8</td>
<td>8</td>
</tr>
</tbody>
</table>
Проблема, с которой я столкнулся, заключается в том, что я не знаю, как перебирать записи совпадений по их атрибуту раунда. Я не уверен, что можно использовать что-то вроде in_groups_of, потому что количество игроков, участвующих в раунде, будет разным, оно не всегда будет 8, как показано здесь.
Вот мой код, который просто перебирает все записи и создает таблицу для каждого матча (я ищу таблицы для отдельных раундов):
- @matches.each do |match|
%h1= "Round #{match.round}"
%table.table.table-bordered
%thead
%tr
%th.span4 Player 1
%th.span4 Player 2
%th.span4 Winner
%tbody
%tr
%td= match.register.user.username
%td= match.register_2.user.username
%td= match.winner.user.username unless match.winner.nil?
Вот как должны выглядеть выходные данные, обратите внимание на отдельные таблицы для отдельных раундов: