views:

1181

answers:

2

I am rendering a rails partial and I want to alternate the background color when it renders the partial. I know that is not super clear so here is an example of what I want to do:

Row One grey Background Row Two yellow background Row Three grey Background Row Four yellow background
  • sorry stackoverflow seams to prevent the background colors from being shown but I think this makes my idea clear

This is the view code that I am using

<table>
  <%= render :partial => 'row' :collection => @rows %>
</table>

the _row.html.erb partial looks like this

<tr bgcolor="#AAAAAA">
  <td><%= row.name %></td>
</tr>

The problem is I do not know how to change the background color for every other row. Is there away to do this?

+8  A: 

You could use the Cycle helper. Something like this:

<tr class="<%= cycle("even", "odd") %>">
  <td><%= row.name %></td>
</tr>

Or in your case use bgcolor instead, although i would recomend using css classes.

You can cycle through more than two values: cycle(‘first’, ‘second’, ‘third’, ‘and_more’).

There is also: reset_cycle(‘cycle_name’) This makes sure that on each iteration, you will start again with your first value of the cycle list.

Check the rails documentation for more examples.

Kristian
If you use multiple lists or tables on a page, I recommend naming your cycles. Just pass :name => 'some_unique_name' to the end of the cycle('a', 'b', ...) call.
James A. Rosen
A: 

Another idea, you can use javascript to change the element's style based on (total number of TD's % 2).

That way all your visual stuff are contained in html/css/javascript layer. Then again, this technique does not work if javascript is disabled.

didip