2010-05-17 10 views
32

Tengo X cantidad de objetos de imagen que necesito recorrer en una vista y quiero crear un nuevo div cada 6 objetos más o menos (para una galería).Rieles cada etiqueta de inserción de bucle cada 6 elementos?

He examinado el ciclo, pero parece cambiar cualquier otro registro. ¿Alguien sabe de una forma de insertar código en una vista cada 6 veces?

Probablemente podría hacerlo con bucles anidados, pero estoy un poco perplejo en este caso.

Respuesta

101

Se puede utilizar en conjunción con Enumerable#each_slice#each para evitar cálculos en línea. each_slice rompe la matriz en trozos de n, en este caso 6.

<% @images.each_slice(6) do |slice| -%> 
    <div class="gallery"> 
    <% slice.each do |image| -%> 
     <%= image_tag(image.url, :alt => image.alt) %> 
    <% end -%> 
    </div> 
<% end -%> 
+0

Parece una forma más convencional de hacerlo ... Voy a intentarlo. –

+0

Gracias Thorn, prefiero este método para mantener mi punto de vista limpio. ¡Gracias! –

+0

Gracias, realmente genial – equivalent8

11

Esta es una pregunta de Ruby. Puedes fusionar esto en lo que sea que tu vista esté tratando de hacer.

@list.each_with_index do |item, idx| 
    if((idx + 1) % 6 == 0) 
    # Poop out the div 
    end 
    # Do whatever needs to be done on each iteration here. 
end 
+0

Perfecto. Tienes razón, es Ruby realmente. Gracias. :) –

Cuestiones relacionadas