Rails / Haml:每n次迭代添加一个父类

时间:2012-09-11 19:43:14

标签: html ruby-on-rails ruby algorithm haml

我有一个像这样组织的照片库:

.container
  %li
    %a{src: image.src}
  %li
    %a{src: image.src}
  %li
    %a{src: image.src}

.container
  %li
    %a{src: image.src}
  %li
    %a{src: image.src}
  %li
    %a{src: image.src}

每个容器最多应有3个%li

假设我有@images @images.count => 4

.container
  - for image in @images do
    %li
      %a{src: image.src}

此代码会破坏页面,因为在这种情况下.container有4个%li

我怎样才能每3 .container添加%li

3 个答案:

答案 0 :(得分:7)

我想方法Array#in_groups_of就是你要找的。

- @images.in_groups_of(3, false).each do |images|
  .container
    - images.each do |image|
      %li
        %a{src: image.src}

顺便说一下,使用这种方法你也可以定义缺失图像的替换

%w(1 2 3 4).in_groups_of(3, '_') {|group| p group}
# => ["1", "2", "3"]
# => ["4", "_", "_"]

答案 1 :(得分:1)

我会尝试这样的事情:

- @images.each_slice(3) do |images|
  .container
    - images.each do |image|
      %li
        %a{src: image.src}

答案 2 :(得分:0)

在@images上使用ruby的each_slice方法 http://ruby-doc.org/core-1.9.3/Enumerable.html#method-i-each_slice

- @images.each_slice(3) do |i| ....