2010-10-27 89 views
2

目前这只是一个很长的名单。我如何显示每行5条记录而不是1条?每行显示5条记录?

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

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

<% end %> 

目前

tag1 
tag2 
tag3 
tag4 
tag5 
tag6 
tag7 
... 

所需

tag1 tag2 tag3 tag4 tag5 
tag6 tag7 

我知道这是非常基本的,但我不能设法找到合适的谷歌搜索条款以我自己的答案。 谢谢!

这是我最后使用

<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> 

回答

10

可以使用的ActiveSupport方法in_groups_of采取数组并把它分成组

<% @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

完美,谢谢 – Jason 2010-10-27 21:30:31

1

有可能是一个更好的方式来做到这一点,但是这将工作:

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

请避免在视图中设置变量。 – 2010-10-27 21:15:36

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

您还可以使用的ActiveSupport的in_group_of

0

。每个应该在内部循环

+1

嗨迈克 - 内循环?也许你可以提供代码的重做例子,显示你的意思。 – 2011-11-10 22:50:10