У меня есть таблица групп, где каждая группа имеет такое имя: 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>
Я бы @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 %>
4O-101A
является дефисом.