1

一連の製品をループしているとすると、そのループ内でコンテナー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 %>

しかし、予想通り、4つおきの製品をコンテナで囲むだけです。これを機能させるには2つのループが必要になると思いますが、データを複製せずにこれを行うにはどうすればよいですか?

編集

each_with_indexの代替を使用する場合、このメソッドを使用してインデックスを追跡する方法はありますか?インデックス値に基づいて設定される条件付き属性もいくつかあります。

例えば:

style=<%= index == 0 ? "top:5px;" : ""%>
4

4 に答える 4

3
<% @products.each_slice(4) do |slice| %>
  <div class="page">
    <% slice.each do |product| %>
      <p><%= product.data %></p>
    <% end %>
  </div>
<% end %>
于 2012-06-11T16:56:50.753 に答える
2

別のアプローチ:

<% while group = @products.take 4 %>
  <div class="page">

  <% group.each do |product| %>
    <p><%= product.data %></p>
  <% end %>

  </div>
<% end %>
于 2012-06-11T16:59:35.843 に答える
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>

(編集:終了タグを忘れました!)

于 2012-06-11T16:51:56.740 に答える
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| %>
于 2012-06-11T16:58:56.430 に答える