2011-06-14 20 views
6

tengo el siguiente código (simplificado para llegar al punto):haml nuevo tr cada 3 artículos

- @assumptions[1].each do |ca| 
     - if count % 3 == 1 
     %tr 
      %th 
      = ca.value 
     - else 
     %th 
      = ca.value 
     - count = count + 1 

No estoy seguro de cómo hacer este trabajo en haml que tiene cada 4 elementos crean una nueva etiqueta .

Ésta es la forma en que está emitiendo:

<tr> 
    <tr> 
     <th> 
     700.0 
     </th> 
    </tr> 
    <th> 
     1235.0 
    </th> 
    <th> 
     0.8 
    </th> 
    <th> 
     650.0 
    </th> 
    <tr> 
    <th> 
     1050.0 
    </th> 
    </tr> 
    <th> 
    0.2 
    </th> 
</tr> 

Así es como me gustaría que la salida:

<tr> 
    <th> 
    700.0 
    </th> 
    <th> 
    1235.0 
    </th> 
    <th> 
    0.8 
    </th> 
</tr> 
<tr> 
    <th> 
    650.0 
    </th> 
    <th> 
    1050.0 
    </th> 
</tr> 

Espero que esto tenga sentido.

Respuesta

22

Puede utilizar Enumerable's each_slice method agruparlas en trozos de 3:

- @assumptions[1].each_slice(3) do |group| 
    %tr 
    - group.each do |ca| 
     %th= ca.value 
+1

+1. Batirme por 1 minuto! –

+0

increíble, gracias !!! –

+1

Respuestas como esta reafirman la razón por la que amo Stack Overflow. Acabo de recortar 20 líneas de código (más un parcial) hasta 8 (y eliminé el parcial) gracias a esta joya de respuesta :-) –