2011-12-10 13 views
1

これは私のコードです:私は、テーブルに行を切り替えたい置かれ、各4曲のビデオでRubyを使ってHTMLテーブルを印刷するには?

<table class="video_table"> 
    <% count = 0 %> 
    <tr> 
    <% @f_videos.each do |f_video| %> 
    <td><%= f_video.name %></td> 
    <td><%= f_video.date_added %></td> 
    <td><%= f_video.views %></td> 
    <% count +=1 %> 
    <% if count == 4 %> 
     </tr> 
    <% end %> 
    <% end %> 
</table> 

。そこで私はカウンターを実装しました。 しかし、それは動作していません。何か案は?

+2

リセットしないので、「4」と一度しか一致しません。一般に、このタイプのタスクは '%'(モジュロ)演算子で行われるため、リセットする必要はありません。 –

+0

コードを正しくインデントしてください。「thx」は使用しないでください。 –

答えて

2

あなたのカウントは1回だけ4に設定されます。

代わり if count == 4使用の

if count % 4 == 0

これはまた4


の各倍数のため</tr>を繰り返すことになります、あなたはカウント変数を使用してスキップし

同じ結果を得るために each_with_indexを使用することができます
<table class="video_table"> 
<% @f_videos.each_with_index do |f_video, i| %> 
    <tr> 
    <td><%= f_video.name %></td> 
    <td><%= f_video.date_added %></td> 
    <td><%= f_video.views %></td> 
    <% if (i+1) % 4 == 0 %> 
     </tr> 
    <% end %> 
<% end %> 
</table> 

さらに良い!each_slice

<table class="video_table"> 
<% @f_videos.each_slice(4).to_a do |slice| %> 
    <tr> 
    <% slice.each do |f_video| %> 
     <td><%= f_video.name %></td> 
     <td><%= f_video.date_added %></td> 
     <td><%= f_video.views %></td> 
    <% end %> 
    </tr> 
<% end %> 
</table> 
+0

thx!私のコードにも別のエラーがありました。は<%@ f_videos.each do | f_video | %> –

+0

@TestTest 'each_slice'の例を参照してください。私はこれを行うための最良の方法だと思います。 –

+0

また、StackOverflowへようこそ!この回答があなたのために働いた場合は、それを受け入れたものとしてマークしてください:) –

1

別の解決策:

<table class="video_table"> 
<% @f_videos.in_groups_of(4) do |group| %> 
    <tr> 
    <% group.each do |f_video| %> 
     <td><%= f_video.name %></td> 
     <td><%= f_video.date_added %></td> 
     <td><%= f_video.views %></td> 
    <% end %> 
    </tr> 
<% end %> 
</table> 

in_groups_ofが必要、付加価値/という利点を有し、それは非常に有用であることができ、例えば'&nbsp;'と任意の残りのスロットをパディングすることを可能にします。 docsを参照してください。