Hola, me parece que el "<% next %>" te pasa al siguiente ciclo
del loop, así que el resto del código que viene después no se
ejecuta, así que está saliendo algo como:
<tr id="ItemsCatalogo">
<td>
<img src="imagen_1">
<tr id="ItemsCatalogo">
<td>
<img src="imagen_2">
....
y por eso se ve en una sola columna. Fijate en el html generado, a
ver si es algo así.
Por lo que estuve viendo, 'in_groups_of' es de Rails. En 'plain'
Ruby podrías hacer algo así:
<table>
<% @cat.db.each_slice(3) do |row_items| %>
<tr>
<% row_items.each do |item| %>
<td>
<%= img_tag item.image %>
</td>
<% end %>
</tr>
<% end %>
</table>
Lo que me parece un poco desprolijo en este caso es usar una tabla,
porque las filas no representan 'entidades' y las columnas no son
'atributos', y está por una cuestión de diseño. Para estos casos, me
parece preferible usar 'divs'. Quedaría algo así:
<div class='gallery'>
<% n_columns = 3 %>
<% column_height = @cat.db.count/n_columns + 1 %>
<% @cat.db.each_slice(column_height) do |column_items|
%>
<div class='gallery-column'>
<ul
class='unstyled'>
<% column_items.each do |item| %>
<li>
<%= img_tag item.image %>
</li>
<% end %>
</ul>
</div>
<% end %>
</div>
Si usás algún framework, no necesitas editar el css, es cuestión de
agregar algunas clases nomás.
Saludos, Alfonso.