配列上のグループの正しいインデックス値を表示するにはどうすればよいですか?
概要
products という次のテーブルがあります。
|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 %>
要素の量に関係なく機能します