我有一个渲染@collection用户的ajax方法。此代码来自用户部分。现在我需要做的是为每个第三个对象在3个li标签周围包裹一个ul标签。我如何使用HAML执行此操作?我不能只将%ul标记添加到“when 1” - 因为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>
等
答案 0 :(得分: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
答案 1 :(得分:2)
这应该在功能上等同于Chuck的答案,只是稍微短一些。
我更喜欢Chuck答案的简单性,但这确实有效。
- @collection.each_slice(3) do |slice|
%ul
- slice.zip([:first,nil,:last]).each do |user, klass|
%li{:class => klass}= user.login