带有间隔的Ruby循环

时间:2014-03-11 16:20:57

标签: ruby-on-rails ruby loops

我的循环为每次迭代创建一个新行。我希望它每行循环3次。

我没有运气3.times {...}或.step(3)。

我的循环:

<% @image_paths.each do |image| %>
<div class="row">
<ul class="thumbnails">
        <li class="span3">
            <h3><%= File.basename(image) %></h3>
            <% image_path = ["", File.dirname(image).split("public"),"/", File.basename(image)].join('') %>
        <%= link_to image_tag(image_path), image_path[/\/.*/]%>
    </li>
 </ul>
</div>
<% end %>

2 个答案:

答案 0 :(得分:2)

您正在寻找

http://ruby-doc.org/core-1.9.3/Enumerable.html#method-i-each_slice

<% @image_paths.each_slice(3) do |slice| %>
  <div class="row">
    <ul class="thumbnails">
      <% slice.each do |image| %>
        <li class="span3">
          <h3><%= File.basename(image) %></h3>
          <% image_path = ["", File.dirname(image).split("public"),"/", File.basename(image)].join('') %>
          <%= link_to image_tag(image_path), image_path[/\/.*/]%>
        </li>
      <% end %>
    </ul>
  </div>
<% end %>

因此,slice变量将是3(或2或1)个图像的数组,或者是初始集合中的任何图像。希望有所帮助!

答案 1 :(得分:0)

使用Rails,您可以使用in_groups_of方法获取一组3个image_path&#39; s,

<% @image_paths.in_groups_of(3, false).each do |images| %>
<div class="row">
<% images.each do |image| %>
  <ul class="thumbnails">
          <li class="span3">
              <h3><%= File.basename(image) %></h3>
              <% image_path = ["", File.dirname(image).split("public"),"/", File.basename(image)].join('') %>
          <%= link_to image_tag(image_path), image_path[/\/.*/]%>
      </li>
   </ul>
 <% end %>
</div>
<% end %>

有关详细信息,请参阅Official Documentation of Rails