2012-07-20 75 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()

相關問題