确定Array.each中的元素索引

时间:2012-07-26 17:58:58

标签: ruby arrays ruby-on-rails-3 ruby-on-rails-3.1 each

我正在尝试以三行为单位呈现大量内容。但是,我不确定如何使用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>

我唯一的事情是AnimalActiveRecord::Base的子类,所以我不确定(没有看过)这是否可以很好地扩展,更不用说每次调用{ {1}}将是一种超级密集的方法。欢迎任何建议。

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开发人员。这是我最喜欢的模块,几乎总能帮助我轻松解决棘手的问题。