【问题标题】:How do I add left and right classes to every other element in a loop in Ruby on Rails?如何在 Ruby on Rails 的循环中将左右类添加到每个其他元素?
【发布时间】:2012-02-28 21:36:53
【问题描述】:

我正在使用 Ruby on Rails 应用程序。我有一个循环创建这样的 div:

<% @snorks.each do |snork| -%>
  <div>
    <%= snork %>
  </div>
<% end %>

我需要输出让所有其他 div 像这样向左或向右浮动:

<div class="left">
  Allstar Seaworthy
</div>
<div class="right">
  Casey Kelp
</div>
<div class="left">
  Dimmy Finster
</div>
<div class="right">
  Daffney Gillfin
</div>
<div class="left">
  Tooter Shellby
</div>
<div class="right">
  Dr. / Uncle Galeo
</div>

另外,我需要每两个div添加一个带有class="clear"的div,如下所示:

<div class="left">
  Allstar Seaworthy
</div>
<div class="right">
  Casey Kelp
</div>
<div class="clear"></div>
<div class="left">
  Dimmy Finster
</div>
<div class="right">
  Daffney Gillfin
</div>
<div class="clear"></div>
<div class="left">
  Tooter Shellby
</div>
<div class="right">
  Dr. / Uncle Galeo
</div>
<div class="clear"></div>

我进行了研究,发现fewposts 说使用cycle() 可以轻松完成备用课程,并且确实有效。但是,当我在循环中的两个地方使用它时,它会停止正常工作,只输出如下内容:

<div class="left">
  Allstar Seaworthy
</div>
<div class="left">
  Casey Kelp
</div>
<div class="left">
  Dimmy Finster
</div>
<div class="left">
  Daffney Gillfin
</div>
<div class="left">
  Tooter Shellby
</div>
<div class="left">
  Dr. / Uncle Galeo
</div>

在 Ruby on Rails 中循环交替类并每隔一个循环添加一些内容的最佳实践方式是什么?

【问题讨论】:

    标签: ruby-on-rails ruby loops


    【解决方案1】:

    根据documentation,如果您需要嵌套的,您可以命名它们。否则它们将共享名称“默认”并发生冲突。

    <% @snorks.each do |snork| -%>
      <div class="<%= cycle('left', 'right') -%>">
        <%= snork %>
      </div>
      <%= cycle('','<div  class="clear"></div>', :name=>"cleardiv") %>
    <% end %>
    

    【讨论】:

      【解决方案2】:

      这里最好的方法似乎是使用每个索引。这样你就可以做一些简单的模数运算来确定数字是奇数还是偶数,并输出正确的类并添加清除。

      @snorks.each_with_index do | snork, index|
         If index%2 == 0 
            class = 'left'
         else
            class = 'right'
         end
      

      好吧,你明白我的意思,我正在打电话。

      【讨论】:

        【解决方案3】:

        使用循环助手

        http://apidock.com/rails/ActionView/Helpers/TextHelper/cycle

        <% @snorks.each do |snork| -%>
          <div  class="<%= cycle("left", "right") -%>">
            <%= snork %>
          </div>
        <% end %>
        

        编辑: 用于添加新的 div;以下可能会有所帮助

        <% @snorks.each_slice(2) do |snork_batch| -%>
         <% snork_batch.each do |snork|%>
          <div  class="<%= cycle("left", "right",:name=>"className") -%>">
            <%= snork %>
          </div>
        <%end%>
        <div  class="clear"></div>
          <% reset_cycle("className")%>
        <% end %>
        

        【讨论】:

        • 我尝试了循环助手,它可以很好地输出左右。当我尝试在同一个循环中再次使用它以每隔一个循环添加一个清晰的修复 div 时,使用循环都不起作用。
        猜你喜欢
        • 2022-01-08
        • 2016-06-15
        • 2013-09-07
        • 1970-01-01
        • 1970-01-01
        • 2019-11-07
        • 2016-11-23
        • 1970-01-01
        • 2023-03-07
        相关资源
        最近更新 更多