0

ビデオを 4 つのエントリの行に表示する必要があります。

それはそのように見えるはずです(xビデオであること):

× | × | × | バツ
× | × | × | バツ
× | × | × | バツ

現在、whileさらに 4 つのビデオをフェッチできるようになった時点で停止するループを呼び出しています (1 行に 3 つしか表示されないため、レイアウトが崩れることはありません)。変数 ( n) を使用して 4 つのビデオ ( @videos[n..n+3]) を撮影しています。

- n = 0
  - while n+4 < @videos.count do
    .row
      %ul.thumbnails            
        - @videos[n..n+3].each do |v|
          %li.span3
            # code for showing the video
    - n +=4

それを行うためのより良い方法があるはずです。

アップデート

Rails の素晴らしい関数in_groups_ofを見つけました。

このSOの回答に見られるように

ActiveSupport メソッド in_groups_of は配列を取り、それをグループに入れます

更新 2

私の最初の更新は実用的なソリューションですが、受け入れられた回答の方が優れています。

4

1 に答える 1

1

Bootstrap の.thumbnailsコンポーネントを使用し.span3ているため、すでに自動的に 4 つの行を取得しています。ループ、ネストされたリスト、またはユーティリティ メソッドは必要ありません。

%ul.thumbnails            
  - @videos.each do |v|
    %li.span3
      # code for showing the video

それはうまくいきます:http://jsbin.com/uguqib/edit

PS ActiveSupportin_groups_ofは、Ruby のビルトインの単なるラッパーでEnumerable#each_sliceあり、最後のセットを締めくくるフィラー アイテムが追加されています。このようなフィラー要素が必要な場合は、自分で非常に簡単にパディングを行うことができます:

- @videos += [ nil ] * ( 4 - @videos.size % 4 )
%ul.thumbnails
  - @videos.each do |v|
    %li.span3
      - if v then render_the_video_element
      - else      render_a_filler_element end
于 2012-07-24T03:25:19.943 に答える