我正在尝试以三行为单位呈现大量内容。但是,我不确定如何使用Ruby确定元素的当前位置。这就是我所拥有的:
<% Animals.each do | animal | %>
<%= animal.species %>
<% end %>
我希望能够添加<BR>
,或者每当我们点击集合中的第三只动物时,我是在渲染表格</TR><TR>
。当然,如果元素nE
的数量不能被3整除,那么表格就会格式不正确。我想通过在迭代后做一些检查我可以关闭它。
但是有没有办法获得在Array.each
方法中迭代的元素的索引?我有强烈的预感,我可以做以下事情:
<table>
<% Animals.each do | animal | %>
<% if Animals.find_index(animal) / 3 == 0 %>
<tr>
<% end %>
<td><%= animal.species %></td>
<% if Animals.find_index(animal) / 3 == 2 %>
</tr>
<% end %>
</table>
我唯一的事情是Animal
是ActiveRecord::Base
的子类,所以我不确定(没有看过)这是否可以很好地扩展,更不用说每次调用{ {1}}将是一种超级密集的方法。欢迎任何建议。
答案 0 :(得分:4)
你需要
<% animals = Animals.all %>
<table>
<% animals.in_groups_of(3) do |animal_row| %>
<tr>
<% animal_row.compact.each do |animal| %>
<td><%= render animal %></td>
<% end %>
</tr>
<% end %>
</table>
应该大致完成这项工作。
更重要的是,我认为保留Enumerable模块的文档非常适合作为Ruby开发人员。这是我最喜欢的模块,几乎总能帮助我轻松解决棘手的问题。