2014-07-10 78 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将是一个好主意