0

大量のコンテンツを 3 行でレンダリングしようとしています。ただし、Ruby を使用して要素の現在の位置を特定する方法がわかりません。これは私が持っているものです:

<% Animals.each do | animal | %>
    <%= animal.species %>
<% end %>

セット内の 3 番目の動物をヒットするたび<BR>にテーブルをレンダリングしていた場合、またはを追加できるようにしたいと考えています。</TR><TR>もちろん、要素の数がnE3 で割り切れない場合は、テーブルの形式が正しくありません。繰り返しの後に少しチェックして、閉じることができると考えました。

しかし、メソッドで反復されている要素のインデックスを取得する方法はあり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>

大まかに仕事をするべきです。

さらに重要なことは、Enumerable モジュールのドキュメントを手元に置いておくことは、Ruby 開発者としての私にとって素晴らしいことだと思います。これは私の「お気に入り」のモジュールであり、ほとんどの場合、トリッキーな問題を簡単に解決するのに役立ちます。

于 2012-07-26T18:02:04.447 に答える