2014-07-10 125 views
1

我已經得到了以下循環:通過迭代循環,增加額外的線路,每4次迭代

<% @count = 0%> 
<%@cards.each do |p|%> 
<li class="span3"> 
    <div class="thumbnail"> 
     <a href="#"><img src=<%= p["url"] %> alt=""></a> 
    </div> 
    <div class="caption"> 
     <h4> <%= p["categories"] %> </h4> 
     <p> 
     <%= p["desc"] %> 
     </p> 
    </div> 
</li> 
<%@count++%> 
<% if @count == 4 %> 
</ul> 
</div><!-- /Slide1 --> 
<div class="item"> 
<ul class="thumbnails"> 
<% @count = 0%> 
<%end%> 
<%end%> 

我試圖顯示HTML的每第四次迭代的額外位,但我只是不斷收到錯誤:

#<NoMethodError: undefined method '[email protected]' for nil:NilClass

+0

你可以發佈你得到的錯誤嗎? –

+0

要增加的Ruby語法不是'@count ++',而是'@count + = 1' – MrYoshiji

+0

你們Ruby傢伙沒有模數運算符嗎? – ArtisticPhoenix

回答

-1

你應該使用.each_with_index

<% @cards.each_with_index do |p, i| %> 

    # your stuff 

    <% if ((i+1) % 4) == 0 %> 

     # your stuff for every 4th element 

    <% end %> 
<% end %> 

另外,小建議:你不應該在視圖中定義實例變量(以@開頭)。它們通常在您的Controller中設置,然後共享給您的視圖(以及在視圖中使用的部分)。

如果有一天,你最終會設立一個視圖中的變量@something = 12,那麼就應該用簡單的局部變量something = 12更換(並最終將它傳遞給你的諧音,如果他們需要的話)。

0

Ruby沒有++增量運算符。所以請將<%@count++%>更改爲<% @count += 1 %>,錯誤將消失。然而,像其他人所說,使用each_with_index將是一個好主意