迭代循环,每4次迭代添加额外的行

时间:2014-07-10 14:55:05

标签: ruby-on-rails loops

我有以下循环:

<% @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 '+@' for nil:NilClass

2 个答案:

答案 0 :(得分:0)

Ruby没有++增量运算符。所以请将<%@count++%>更改为<% @count += 1 %>,错误就会消失。然而,就像其他人说的那样,使用each_with_index将是一个好主意

答案 1 :(得分:-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替换(如果需要的话最终将它传递给你的部分)。