配列に対して、数項目ごとにグループ化してから何かの処理を行いたいときに、each_slice
関数がぴったりです。
each_sliceメソッドは、引数nで指定した数の要素を繰り返し取り出して、ブロックを実行します。ブロック引数arrには、取り出した要素が配列で入ります。
要素数がnで割り切れないときは、最後に余りの要素を取り出します。nの数が要素数より大きいときは、すべての要素を取り出してブロックを1度だけ実行します。
(1..8).each_slice(3).map {|arr| arr }
=> [[1, 2, 3], [4, 5, 6], [7, 8]]