Flowdock
cycle(first_value, *values) public

Returns a Cycle object whose to_s value cycles through items of an array every time it is called. This can be used to alternate classes for table rows:

<%- for item in @items do -%>

  <tr class="<%= cycle("even", "odd") %>">
    ... use item ...
  </tr>

<%- end -%>

You can use named cycles to prevent clashes in nested loops. You’ll have to reset the inner cycle, manually:

<%- for item in @items do -%>

  <tr class="<%= cycle("even", "odd", :name => "row_class")
    <td>
      <%- for value in item.values do -%>
        <span style="color:'<%= cycle("red", "green", "blue"
                                      :name => "colors") %>'">
          item
        </span>
      <%- end -%>
      <%- reset_cycle("colors") -%>
    </td>
  </tr>

<%- end -%>

Show source
Register or log in to add new notes.
April 20, 2009
2 thanks

Cycle with first and last

I needed a cycle that was also aware of the first and last items in the collection. This is adapted from a snippet I found while Googling:

def cycle_with_first_last(object, collection, options = { })
  addition = ""
  addition += " #{options[:first]}" if object == collection.first
  addition += " #{options[:last]}"if object == collection.last
  cycle(options[:odd], options[:even]) + addition
end

Just put that in your helpers…

September 11, 2008
1 thank

CSS columns

You can also use this in a partial to create blocks of content into columns without setting a fixed height. This one is two columns.

.clear { clear: both;}
.block { float:left;width:200px;}

<div class="block">

<p>Content Item</p>

</div>
<%= cycle("", "<div class=\"clear\"></div>") -%>