说我正在遍历一系列产品,我将如何在该循环中分配容器div。例如,我想要输出如下:
<div class="page">
<p>product1</p>
<p>product2</p>
<p>product3</p>
<p>product4</p>
</div>
<div class="page">
<p>product5</p>
<p>product6</p>
<p>product7</p>
<p>product8</p>
</div>
我试过这样的事情:
<% @products.each_with_index do |product, index| %>
<% if index%4 == 0 %>
<div class="page">
<%end%>
<p><%= product.data %>
<% if index%4 == 0 %>
</div>>
<%end%>
<% end %>
但正如预期的那样,它只能用容器包围每一个产品。我想我将需要两个循环才能使其正常工作,但是如何在不重复数据的情况下实现这一目标呢?
修改
当使用each_with_index的替代方法时,是否有办法使用此方法跟踪索引?还有一些基于索引值设置的条件属性。
例如:
style=<%= index == 0 ? "top:5px;" : ""%>
答案 0 :(得分:3)
<% @products.each_slice(4) do |slice| %>
<div class="page">
<% slice.each do |product| %>
<p><%= product.data %></p>
<% end %>
</div>
<% end %>
答案 1 :(得分:2)
另一种方法:
<% while group = @products.take 4 %>
<div class="page">
<% group.each do |product| %>
<p><%= product.data %></p>
<% end %>
</div>
<% end %>
答案 2 :(得分:1)
<div class="page">
<% @products.each_with_index do |product, index| %>
<p><% product.data %></p>
<% if index % 4 == 3 %>
</div><div class="page">
<% end %>
<% end %>
</div>
(编辑:忘了我的结束标签!)
答案 3 :(得分:1)
将数组拆分为相同大小的组的Rails方法是ary.in_groups_of(number)
<% @products.in_groups_of(4, false) do |group| %>
<div class="page">
<% group.each do |product| %>
<p><% product.data %></p>
<% end %>
</div>
<% end %>
Haml好多了:)
- @products.in_groups_of(4, false) do |group|
.page
- group.each do |product|
%p= product.data
您可以使用@products.index(product)
获取绝对产品索引,或使用
<% @products.in_groups_of(4, false).each_with_index do |group, group_index| %>