2010-10-27 5 views
2

Actuellement, cela fait juste une longue liste. Comment afficher ceci avec 5 enregistrements par ligne au lieu de 1?Afficher 5 enregistrements par rangée?

<% @tags.each do |tag| %> 

<p><%= tag_search(tag) %></p> 

<% end %> 

actuellement

tag1 
tag2 
tag3 
tag4 
tag5 
tag6 
tag7 
... 

désiré

tag1 tag2 tag3 tag4 tag5 
tag6 tag7 

Je sais que c'est vraiment basique mais je ne peux pas réussi à trouver les termes de recherche Google pour obtenir la réponse moi-même. Merci!

ce que je fini par utiliser

<table> 
<% @tags.in_groups_of(4, false) do |row_tag| %> 
    <tr> 
    <% for tag in row_tag %> 
     <td><%= tag_search(tag) %></td> 
    <% end %> 
    </tr> 
<% end %> 
</table> 

Répondre

10

Vous pouvez utiliser la méthode ActiveSupport in_groups_of pour prendre un tableau et le mettre en groupes

<% @tags.in_groups_of(5).each do |tag_array| %> 
    <% tag_array.each |tag| %> 
    ... 

Original Doc from Rails Docs

%w(1 2 3 4 5 6 7).in_groups_of(3) {|g| p g} 
    ["1", "2", "3"] 
    ["4", "5", "6"] 
    ["7", nil, nil] 
+0

parfait, merci – Jason

1

Il y a probablement une meilleure façon de le faire, mais cela fonctionnera:

<% @tags.each do |tag, i| %> 
     <%= '<p>' if i == 1 %> 
     <%= tag_search(tag) %> 
     <% if i == 5 %> 
      <% i = 0 %> 
      </p> 
     <% end %> 
<% end %> 
+1

Veuillez éviter de définir des variables dans la vue. –

2
<% @tags.each_with_index do |tag, index| %> 
    <%= tag_search(tag) %> 
    <%= "<br />" if (index % 5).zero? %> 
<% end %> 

Vous pouvez également utiliser in_group_of de ActiveSupport.

0

.chaque doit être sur la boucle interne

+1

salut Mike - quelle boucle interne? Vous pourriez peut-être fournir un exemple retravaillé du code montrant la solution que vous voulez dire. –

Questions connexes