2010-05-17 8 views
32

Ho un numero X di oggetti immagine che ho bisogno di scorrere in una vista e voglio creare un nuovo div ogni 6 oggetti o giù di lì (per una galleria).Rails ogni loop inserisce tag ogni 6 articoli?

Ho visto il ciclo ma sembra che cambi ogni altro record. Qualcuno sa di un modo per inserire il codice in una vista ogni 6 volte?

Probabilmente potrei farlo con cicli annidati ma sono un po 'stordito su questo.

risposta

101

È possibile utilizzare Enumerable#each_slice in combinazione con #each per evitare calcoli in linea. each_slice interrompe l'array in blocchi di n, in questo 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

Sembra un modo più convenzionale per farlo ... Proverò. –

+0

Grazie a Thorn, preferisco questo metodo per mantenere pulite le mie opinioni. Grazie! –

+0

Grazie, davvero bello – equivalent8

11

Questa è una domanda di Ruby. Puoi combinarlo in qualunque cosa la tua vista stia tentando di fare.

@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

Perfetto. Vostro diritto, è davvero Ruby. Grazie. :) –

Problemi correlati