Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
- @last_date = ''
- @results.each do |row|
- if row.election_d != @last_date
- @last_date = row.election_d
%h2= row.election_d
%td{ :style => "background-color: #{row.party_colour}" }
%td= row.party_name
%td= row.c_surname
%td= to_ordinal(row.position)
%td= commify(row.votes)

adrianshort commented Jan 8, 2012

Haml issues in a Sinatra app. I'm trying to output a collection of tables using data from a single array. This kind of thing works fine in non-significant-whitespace templates but Haml (understandably) can't work out that the %h2 and %table are meant to enclose the following %trs in the block below. Any ideas for a workaround? I could generate each table from a separate query but it's preferable to do them all at once.

kitop commented Jan 8, 2012

You have to nest the %tr inside the %table to work in haml..
You could consider some other approach like grouping the records by election_d before and then iterating.
Assiming you're on ruby 1.9, you could try something like

@results.group_by{|result| result.election_d }.each do |election_date, row|
  %h2= election_date

adrianshort commented Jan 12, 2012

Thanks for that. I hadn't heard of group_by before but I can see how that's useful.

In the end I simplified it by using nested loops around first the elections and then the candidacies for each election as in this commit.

Here it is in action.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment