2012-10-13 3 views
5

쇼 뷰에서 각 루프를 반복하고있는 목록이 있습니다. 이것은 모두 완벽하게 괜찮습니다. 그러나 모든 루프 (i = 0, i ++에 대해 드릴을 알고 있음)가 증가 할 때마다 각 항목에 대한 정보를 얻고 싶습니다.뷰 레일에서의 카운팅

이제 Rails에서 어떻게 할 수 있습니까? 이것은 내가 지금하는 것입니다 :

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

답변

11

보기에서 변수를 인스턴스화하는 대신 #each_with_index을 사용하십시오!

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

확실히 성공했습니다. 하나; 1시에 i를 시작할 수 있습니까? 이후로 시각적 인 번호 매기기로 사용하고 싶습니다. – CaptainCarl

+2

'<%= i+1 %>'처럼 1 씩 증가시킬 수 있습니다. 이것은 작동하지만 자세한 내용은 [여기] (http://stackoverflow.com/questions/5646390/ruby-each-with-index-offset)를보십시오. –

+0

공정한만큼, 고마워! – CaptainCarl

0

아마도 당신은 이런 종류의 코드를 원할 것입니다.

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

참고 :

당신은 배치 할 수 있습니다

<%= i %> 

어디서나 당신은 루프 내에서 원하는 코드입니다.

0

루비에는 ++ 연산자가 없습니다. 대신 당신은 += 1을 사용

array = 'a'..'d' 

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

인쇄를

0 a 
1 b 
2 c 
3 d 

그러나, 당신이하지 말아야 이미 수있는 편리한 방법이 있기 때문에 것을 :하고있는 또 다른 방법이있다

array = 'a'..'d' 

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

Rails에만 해당되는 것입니다. 부분을 ​​사용하여 콜렉션을 렌더링하는 경우 object_counter 변수를 사용할 수 있습니다. 여기서 "object"는 모델 이름입니다. 예 :

<%= render @trip.triplocations %> 

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