Thursday, February 17, 2011

conditional formating in rails partials

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?

From stackoverflow
  • 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.

    James A. Rosen : 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.
  • 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.

0 comments:

Post a Comment