2009-07-22 78 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