Rails partials和HAML

时间:2009-07-22 23:02:08

标签: ruby-on-rails ruby

我有一个渲染@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>

2 个答案:

答案 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