2012-10-13 16 views
5

Mam listę elementów, które zapętlałem w widoku każdego z moich programów. Wszystko to doskonale. Chciałbym jednak uzyskać numer przed każdym elementem, który wzrasta z każdą pętlą (i = 0, i ++ znasz ćwiczenie).Liczenie w widokach szyn

Jak mogę to zrobić w Railsach? Oto, co otrzymuję:

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

Odpowiedz

11

Użyj #each_with_index zamiast tworzyć instancję zmiennej w widoku!

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

To na pewno działało! Jednak; czy można uruchomić i na 1? Ponieważ chcę go używać jako numeracji wizualnej. – CaptainCarl

+2

Możesz zwiększyć o 1 wartość tego '<%= i+1 %>'. To powinno działać, ale po więcej informacji zajrzyj do [TUTAJ] (http://stackoverflow.com/questions/5646390/ruby-each-with-index-offset). –

+0

Wystarczająco fair, dzięki! – CaptainCarl

0

Prawdopodobnie chcesz tego rodzaju kodu.

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

Uwaga:

można umieścić kod

<%= i %> 

gdziekolwiek chcesz wewnątrz pętli.

0

Brak operatora ++ w języku Ruby. Zamiast używać += 1:

array = 'a'..'d' 

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

Drukuje

0 a 
1 b 
2 c 
3 d 

Jednak nie powinien tego zrobić, ponieważ nie ma już wygodny sposób, że:

array = 'a'..'d' 

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

Jest jeszcze inny sposób robienia to specyficzne dla Rails. Jeśli wyrenderujesz kolekcję przy użyciu częściowej, dostępna będzie zmienna object_counter, gdzie "object" jest nazwą twojego modelu. Na przykład:

<%= render @trip.triplocations %> 

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