【问题标题】:Rails each loop insert tag every 6 items?Rails每个循环每6个项目插入标签?
【发布时间】:2010-05-17 19:00:26
【问题描述】:

我有 X 个图像对象,我需要在视图中循环遍历,并希望每 6 个左右对象创建一个新 div(对于图库)。

我查看了循环,但它似乎改变了所有其他记录。有谁知道每 6 次向视图中插入代码的方法?

我可能可以用嵌套循环来做到这一点,但我有点难倒这个。

【问题讨论】:

    标签: ruby-on-rails ruby loops


    【解决方案1】:

    您可以将Enumerable#each_slice#each 结合使用,以避免内联计算。 each_slice 将数组分成 n 块,在本例中为 6。

    <% @images.each_slice(6) do |slice| -%>
      <div class="gallery">
        <% slice.each do |image| -%>
          <%= image_tag(image.url, :alt => image.alt) %>
        <% end -%>
      </div>
    <% end -%>
    

    【讨论】:

    • 这似乎是一种更传统的方法。我会尝试一下。
    • 谢谢Thorn,我更喜欢这种方法来保持我的观点干净。谢谢!
    • 谢谢,这很好用。比保持柜台更性感。
    • 在 Solr 中使用不支持 @documents.each_hit_with_result 这样的交互器时,您将如何处理?
    • 我以前没有使用过 Solr,但我看到如果没有给出块(典型的 Ruby 行为),该方法返回一个可枚举的值。在这种情况下,您应该能够在它上面链接:@documents.each_hit_with_result.each_slice(6) do |slice|。来源:github.com/sunspot/sunspot/blob/master/sunspot/lib/sunspot/…
    【解决方案2】:

    这是一个 Ruby 问题。您可以将其融合到您的视图试图做的任何事情中。

    @list.each_with_index do |item, idx|
      if((idx + 1) % 6 == 0)
        # Poop out the div
      end
      # Do whatever needs to be done on each iteration here.
    end
    

    【讨论】:

    • 很好的解决方案@jdl,这非常适合将广告部分注入循环列表(过去我很难弄清楚)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-18
    • 2013-04-29
    • 2021-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多