我有以下循环:
<% @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
答案 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
替换(如果需要的话最终将它传递给你的部分)。