0

私はJavaのバックグラウンドからRubyを始めたばかりです。特定のループをコーディングしようとしていますが、正しい構文がわかりません。

誰かがこれのトラブルシューティングを手伝ってくれませんか? ループを記述しようとしていますが、異なる css クラスを使用して各ブロックのスタイルを変更しています。

これはおそらく簡単ですが、助けていただければ幸いです....

    <%= @products.each do |product, i| %>
    <% if i % 1 %>
    <div class="items-row clearfix">
      <div class="one_fourth">
            <div class="item-thumb">
                <a href="" title=""><img src="<%= image_path "thumb.png" %>" alt="" class="thumb" width="162" height="230" /></a>
            </div>
            <p><%= product.name %></p>
            <p class="bold">$79.95 AUD</p>
            <p class="color-wrap">
                <span class="color" style="background:#ddd;"></span>
                <span class="color" style="background:#f9f9f9;"></span>
                <span class="color" style="background:green;"></span>
                <span class="color" style="background:red;"></span>
            </p>
        </div> 
    <% elsif i % 4 %>
    <div class="one_fourth last">
        <div class="item-thumb">
            <a href="#" title=""><img src="<%= image_path "thumb.png" %>" alt="" class="thumb" width="162" height="230" /></a>
        </div>
        <p><%= product.name %></p>
        <p class="bold">$79.95 AUD</p>
    </div>
    </div><!-- end row -->
    <% else %>
        <div class="one_fourth">
            <div class="item-thumb">
                <a href="#" title=""><img src="<%= image_path "thumb.png" %>" alt="" class="thumb" width="162" height="230" /></a>
            </div>
            <p>Item Name</p>
            <p class="bold">$79.95 AUD</p>
        </div>
    <% end %>
<% end %>
4

5 に答える 5

2

cycleを使用して、次のようなことができます。

<% products.each_slice(4) do |slice| %>
  <div class="items-row clearfix">
    <% slice.each_with_index do |product,i| %>
      <div class="one_fourth <%= cycle("first", "second", "third", "fourth") %>">
        <%= render product %>
        <% if i != 3 %>
          <p class="color-wrap">
            <span class="color" style="background:#ddd;"></span>
            <span class="color" style="background:#f9f9f9;"></span>
            <span class="color" style="background:green;"></span>
            <span class="color" style="background:red;"></span>
          </p>
        <% end %>
      </div>
    <% end %>
  </div>
<% end %>

_product.html.erb:

<div class="item-thumb">
  <a href="" title=""><img src="<%= image_path "thumb.png" %>" alt="" class="thumb" width="162" height="230" /></a>
</div>
<p><%= product.name %></p>
<p class="bold">$79.95 AUD</p>
于 2012-07-12T12:14:06.277 に答える
1

ビューの if/else ステートメントと CSS マークアップではなく、おそらく CSS を外部化し、いくつかのパーシャルを作成し、ActionView::Helpers::TextHelper#cycleを利用する必要があります。例えば:

<%= @products.each do |product| %>
  <div class="<%= cycle('first', 'second', 'third', 'fourth') -%>">
    <!-- 1. let the CSS class handle display differences -->
    <!-- 2. render a partial based on #current_cycle     -->
    <%= render :partial => current_cycle %>        
  </div>
<% end %>
于 2012-07-12T12:15:13.410 に答える
0

jQuery nth-childを試してみてください

于 2012-07-14T04:19:55.983 に答える
0

mod が問題だと思います。n%1 は常に 0 を返すため、最初のブロックに入ることはありません。irbを使用してロジックを試してみてください。

于 2012-07-12T12:14:04.303 に答える
-1

私は答えの一部を得ました。each の代わりに "each_with_index" を使用するように構文を少し変更。

製品が最後のタイルになり、閉じる必要がある場合、最初の列、最初のセット、最後の列の場合など、さまざまなバリエーションがあることをまだ解決しようとしています.....

みんなありがとう、私は自分の質問に答えたと思います。

于 2012-07-13T14:13:24.153 に答える