У меня есть следующая таблица под названием продукты:
|id| |name|
81 monitor
82 keyboard
83 mouse
84 headphone
Контроллер — Products_controller.rb со следующим кодом:
def index
@products = Product.all
end
Он должен отобразить следующий результат
|Nº| |name| |Nº| |name|
1 monitor 3 mouse
2 keyboard 4 headphone
Я попробовал следующий код, используя SLICE:
<table>
<tr>
<td>Nº</td>
<td>Product</td>
</tr>
<% @products.each_slice(2).each_with_index do |grouped_array,row_index| %>
<tr>
<% grouped_array.each_with_index do |array, column_index| %>
<td><%= column_index + 1 %></td>
<td><%= array.name %></td>
<% end %>
</tr>
<% end %>
</table>
Результат использования SLICE был:
|Nº| |name| |Nº| |name|
1 monitor 1 mouse
2 keyboard 1 headphone
Я пробовал использовать in_groups_of
<% @products.in_groups_of(2).each_with_index do |grouped_array,row_index| %>
<tr>
<% grouped_array.each_with_index do |array, column_index| %>
<td><%= column_index + 1 %></td>
<td><%= array.name %></td>
<% end %>
</tr>
<% end %>
Результат использования in_groups_of был:
|Nº| |name| |Nº| |name|
1 monitor 1 mouse
2 keyboard 1 headphone
Для индекса кода IN_GROUPS_OF для элемента можно рассчитать следующим образом
Смена контроллера
@half_size = (@products.size / 2.0).round
Посмотреть изменения
<% @products.in_groups_of(@half_size).transpose.each_with_index do |grouped_array, row_index| %>
<tr>
<% grouped_array.each_with_index do |item, column_index| %>
<% if item.present? %>
<td><%= row_index + column_index * @half_size + 1 %></td>
<td><%= item.name %></td>
<% end %>
<% end %>
</tr>
<% end %>
Работает для любого количества элементов
Вы имели в виду, что вам также требуется модификация представления таблицы?
поэтому первый столбец должен содержать первые элементы grouped_array? тогда ваши итерации просмотра должны быть изменены
Да, понравился пост
Ваш код работает, но он повторяется слева направо, в результате отображается 1....2 3.....4, а должно отображаться 1.......3 .......2 . .....4