2012-07-20 76 views
8

我的成员索引页只是一个成员列表,但我希望每3个成员被包装在一个包含div(这将行为像一个行)。因此,而不是:如何在ERB(Rails)中包装父元素中的每个N元素?

<div class="member"></div> 
<div class="member"></div> 
<div class="member"></div> 
<div class="member"></div> 
<div class="member"></div> 

我需要的标记是:

<div class="row"> 
    <div class="member"></div> 
    <div class="member"></div> 
    <div class="member"></div> 
</div> 
<div class="row"> 
    <div class="member"></div> 
    <div class="member"></div> 
</div> 

我有一个解决方案,但我不喜欢它。我曾在ERB中看到过更好的方法,但是再也找不到它了。

我当前的代码:

<div class="row"> 
    <% @members.each do |member| %> 
    <div class="member"><%=member.name%></div> 
    <%= cycle("", "", "</div><div class=\"row\">".html_safe) %> 
    <% end %> 
</div> 

回答

15

如何:

<% @members.each_slice(3) do |slice| %> 
    <div class="row"> 
    <% slice.each do |member| %> 
     <div class="member"> 
     ...your markup here 
     </div> 
    <% end %> 
    </div> 
<% end %> 
+2

您还可以in_groups_of更换each_slice(3)(3,FALSE) – 2012-07-20 15:11:23

+0

三江源,先生!这正是我正在寻找的。 – tybro0103 2012-07-20 15:17:13

+0

'in_groups_of'不适合我。这个答案'each_slice'节省了我的时间。 – 2017-05-24 09:39:34

0

听起来像一个伟大的机会,使用模

<div class="row"> 
<% for(i=1, i<[email protected], i++ %> 
    <% if i%4 == 0 %> 
     </div> 
     <div class="row"> 
    <% end %> 
    <div class="member"><%[email protected][i-1]%></div> 
<% end %> 
</div> 
+0

这比cycle()助手更复杂。我正在寻找更简单的东西。 – tybro0103 2012-07-20 15:14:53

2

我发现我一直在寻找的方法。这基本上等同于each_slice()发表@HargrimmTheBleak,但有一个更友好的名称:

in_groups_of()

相关问题