0

我正在尝试以三行呈现大量内容。但是,我不确定如何使用 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,所以我不确定(还没有看到)这是否会很好地扩展,更不用说每次调用find_index是否都是超级密集的方法。欢迎任何建议。

4

1 回答 1

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>

应该大致完成这项工作。

更重要的是,作为一名 Ruby 开发人员,我认为将 Enumerable 模块的文档放在手边对我来说非常棒。它是我“最喜欢”的模块,几乎总是可以帮助我轻松解决棘手的问题。

于 2012-07-26T18:02:04.447 回答