Rails - лучший способ разбить записи на 4 списка по имени

0

У меня есть таблица групп, где каждая группа имеет такое имя: 4O-101A, 4O-101B, 4O-201A т.д.

Четвертый символ в имени - номер - представляет номер курса для группы. 40-101A относится к курсу 1. Я хочу сделать 4 html-списка для каждого из 4 курсов, поэтому скрипт должен проверить четвертый символ и поместить группу в соответствующий список.

Я пытался это сделать, но только придумал это уродливое решение. http://pastebin.com/TVBSQ71q Он имеет 4 цикла и много повторяющегося кода, но я хочу, чтобы он был СУХОЙ. Невозможно найти способ его достижения.

Не могли бы вы мне помочь? Код должен генерировать 4 списка, которые выглядят как один для 1-го курса

<h3>1 course:</h3>
  <ul class='group-list'>
    <%@groups.each do |group|%>
    <% if group.name.slice(3, 1) == '1' %>
          <li id='<%= group.id %>'>
            <button class='ui-list'><%= link_to  group.name , group %></button>
            <% if admin %>
              <div class='btn-con'><%= link_to 'Delete', group, remote: true, method: :delete%></div>
            <% end %>
          </li>
    <%end %>
  <%end%>
  </ul>
  • 1
    Третий символ в 4O-101A является дефисом.
  • 0
    @Stefan Стефан, мой плохой
Теги:

1 ответ

2
Лучший ответ

Я бы @groups массив @groups используя Enumerable#group_by:

@groups_by_course_number = @groups.group_by { |group| group.name[3] }

Это возвращает хэш с номерами курсов в виде ключей. На ваш взгляд:

<% @groups_by_course_number.each do |course_number, groups| %>
  <h3><%= course_number %> course:</h3>
  <ul class='group-list'>
    <% groups.each do |group| %>
      <li id='<%= group.id %>'>
        ...
      </li>
    <% end %>
  </ul>
<% end %>
  • 0
    Работал как ветерок! Спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню