Squeak.ru - шаблоны программирования

Rails перебирает ActiveRecord по значению атрибута

Допустим, у меня есть массив объектов 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?

Вот как должны выглядеть выходные данные, обратите внимание на отдельные таблицы для отдельных раундов:

список матчей по круговой системе

14.09.2012

Ответы:


1

Возможно, вы имеете в виду сгруппировать матчи по раундам, например:

- @matches.group_by(&:round).each do |round, matches|
  %h1= "Round #{round}"
  %table.table.table-bordered
    %thead
    %tr
      %th.span4 Player 1
      %th.span4 Player 2
      %th.span4 Winner
    %tbody
      - matches.each do |match|
        %tr
          %td= match.register.user.username
          %td= match.register_2.user.username
          %td= match.winner.user.username unless match.winner.nil?
14.09.2012
  • Спасибо, Мегас, но это было не совсем то, что я имел в виду, взгляните на мой скриншот для наглядности. 15.09.2012
  • Вам нужна одна таблица, но несколько разделов в этой таблице, я прав? 15.09.2012
  • Нет, мне нужна таблица для каждого раунда. 15.09.2012
  • Новые материалы

    Угловая структура архитектуры
    Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

    «Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
    Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

    Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
    В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

    Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
    React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

    Создайте API с помощью Python FastAPI
    Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

    Веселье с прокси-сервером JavaScript
    Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

    Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
    Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...