2012-10-13 10 views
5

Ho una lista di elementi che sto collegando in una a ciascuno nella mia vista spettacolo. Questo è tutto perfettamente bene. Tuttavia, mi piacerebbe ottenere un numero di fronte a ciascun elemento che aumenta con ogni ciclo (i = 0, i ++ conosci il trapano).Conteggio in rotaie di viste

Ora, come posso farlo in Rails? Questo è quello che ottengo ormai:

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

risposta

11

Utilizzare #each_with_index invece di istanziare una variabile in 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

Che sicuramente ha funzionato! Però; è possibile avviare l'i a 1? Dal momento che voglio usarlo come una numerazione visiva. – CaptainCarl

+2

È possibile aumentare di 1 come questo '<%= i+1 %>'. Questo dovrebbe funzionare ma per maggiori informazioni date un'occhiata a [QUI] (http://stackoverflow.com/questions/5646390/ruby-each-with-index-offset). –

+0

Abbastanza giusto, grazie! – CaptainCarl

0

Probabilmente vuoi questo tipo di codice.

<% 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:

È possibile inserire il codice

<%= i %> 

ovunque si desidera all'interno del ciclo.

0

Non esiste un operatore ++ in Ruby. Invece di utilizzare += 1:

array = 'a'..'d' 

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

Stampe

0 a 
1 b 
2 c 
3 d 

Tuttavia, non si deve farlo perché c'è già un metodo conveniente per questo:

array = 'a'..'d' 

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

C'è un altro modo di fare quello specifico di Rails. Se esegui il rendering della raccolta utilizzando un partial, avrai a disposizione la variabile object_counter dove "object" è il nome del tuo modello. Ad esempio:

<%= render @trip.triplocations %> 

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