2012-10-13 88 views
5

Tengo una lista de elementos en los que estoy repitiendo un bucle en mi vista de programa. Esto está perfectamente bien. Sin embargo, me gustaría obtener un número delante de cada elemento que se incrementa con cada ciclo (i = 0, i ++ conoces el ejercicio).Contando en View Rails

Ahora, ¿cómo puedo hacer esto en Rails? Esto es lo que obtengo ahora:

<% i = 0 %> 
<% @trip.triplocations.each do |tl| %> 
    <article id="<%= dom_id(tl) %>"> 
    <strong> <%= tl.title %> </strong> 
     <p> 
     <%= tl.description %> 
     </p> 
    </article> 
<% end %> 

Respuesta

11

¡Use #each_with_index en lugar de crear una variable en la vista!

<% @trip.triplocations.each_with_index do |tl, i| %> 
    <article id="<%= dom_id(tl) %>"> 
    <strong> <%= i %>. <%= tl.title %> </strong> 
     <p> 
     <%= tl.description %> 
     </p> 
    </article> 
<% end %> 
+0

¡Eso funcionó! Sin embargo; ¿Es posible comenzar el i en 1? Como quiero usarlo como una numeración visual. – CaptainCarl

+2

Puede aumentar en 1 como este '<%= i+1 %>'. Esto debería funcionar, pero para obtener más información, consulte [AQUÍ] (http://stackoverflow.com/questions/5646390/ruby-each-with-index-offset). –

+0

¡Muy bien, gracias! – CaptainCarl

0

Probablemente desee este tipo de código.

<% i = 0 %> 
<% @trip.triplocations.each do |tl| %> 
    <article id="<%= dom_id(tl) %>"> 
     <strong> <%= tl.title %> </strong> 
     <p> 
      <%= i %> 
      <%= tl.description %> 

     </p> 
    </article> 
    <% i = i + 1 %> 
<% end %> 

Nota:

Puede colocar el código

<%= i %> 

cualquier lugar que desee dentro del bucle.

0

No hay operador ++ en Ruby. En lugar de utilizar += 1:

array = 'a'..'d' 

i = 0 
array.each do |element| 
    puts "#{i} #{element}" 
    i += 1 
end 

imprime

0 a 
1 b 
2 c 
3 d 

Sin embargo, usted no debe hacer eso porque ya existe un método conveniente para que:

array = 'a'..'d' 

array.each_with_index do |element, i| 
    puts "#{i} #{element}" 
end 

Hay otra forma de hacer eso específico de Rails. Si renderiza la colección utilizando un parcial, tendrá la variable object_counter disponible donde "object" es su nombre de modelo. Por ejemplo:

<%= render @trip.triplocations %> 

<% # in views/triplocations/_triplocation.html.erb %> 
<%= triplocation_counter %> 
<%= triplocation.title %>