2009-07-22 108 views
2

我有一個ajax方法來渲染用戶的@collection。此代碼來自用戶部分。現在我需要做的是在每個第三個對象的3個li標籤周圍包裝一個ul標籤。我如何使用HAML來做到這一點?我不能將%ul標籤添加到「when 1」中 - 因爲HAML在渲染該對象時會關閉標籤。Rails partials和HAML

-case user_counter + 1 
-when 1 
    %li.first 
    @user.login 
-when 2 
    %li 
    @uer.login 
-when 3 
    %li.last 
    @user.login 

這就是我要尋找的結果:

<ul> 
    <li>user1</li> 
    <li>user2</li> 
    <li>user3</li> 
</ul> 

<ul> 
    <li>user4</li> 
    <li>user5</li> 
    <li>user6</li> 
</ul> 

回答

5

我想你想each_slice。它將Enumerable分成指定大小的組。你可以這樣做:

- @collection.each_slice(3) do |slice| 
    %ul 
    %li.first= slice[0].login 
    %li= slice[1].login 
    %li.last= slice[2].login 
+0

謝謝:)這只是我一直在尋找。 – atmorell 2009-07-23 06:21:30

+0

如果我想在每個li標籤上使用相同的代碼(%p登錄...等),只更改該類,該怎麼辦?實際內容有大約5行項目,並且將相同的內容粘貼到每個%li標籤中看起來不正確:/ – atmorell 2009-07-23 08:38:06

2

這應該在功能上等同於查克的答案,只是短一點。

我更喜歡查克答案的簡單性,但這也適用。

- @collection.each_slice(3) do |slice| 
    %ul 
    - slice.zip([:first,nil,:last]).each do |user, klass| 
     %li{:class => klass}= user.login