使用Ruby on Rails每行显示4个条目

时间:2012-07-24 03:08:50

标签: ruby-on-rails twitter-bootstrap

我需要以4个条目的行显示视频。

看起来应该是这样(x是视频):

x | x | x | x
x | x | x | x
x | x | x | x

现在,我正在调用一个while循环,当我可以再获取4个视频时它将停止(因此它不会通过在一行上只显示三个来打破布局)。我正在使用变量(n)拍摄4个视频(@videos[n..n+3])。

- n = 0
  - while n+4 < @videos.count do
    .row
      %ul.thumbnails            
        - @videos[n..n+3].each do |v|
          %li.span3
            # code for showing the video
    - n +=4

必须 才能做到这一点。

更新

我发现了令人敬畏的Rails函数in_groups_of

如此SO answer

所示
  

ActiveSupport方法in_groups_of接受一个数组并将其放入组

更新2

我的第一次更新是一个有效的解决方案,但接受的答案更好。

1 个答案:

答案 0 :(得分:1)

您正在使用Bootstrap的.thumbnails组件和.span3,因此您已经自动获得了四行。您不需要任何循环,嵌套列表或实用程序方法。

%ul.thumbnails            
  - @videos.each do |v|
    %li.span3
      # code for showing the video

它只是有效:http://jsbin.com/uguqib/edit

P.S。 ActiveSupport的in_groups_of只是Ruby内置Enumerable#each_slice的包装器,附加了填充项以完善最后一组。如果你需要这样的填充元素,你可以很容易地自己进行填充:

- @videos += [ nil ] * ( 4 - @videos.size % 4 )
%ul.thumbnails
  - @videos.each do |v|
    %li.span3
      - if v then render_the_video_element
      - else      render_a_filler_element end