<table class="people">
<thead>
<tr>
<th class="header">First Name</th>
<th>Last Name</th>
<th>Registration Status</th>
</tr>
</thead>
<tbody>
<% @people.each do |person| %>
<tr class="<%= person.registration_status %>">
<td>Michael Bluth</td>
<td>Bluth</td>
<td>
<% if person.registered? %>
<strong>Registered</strong>
<% else %>
<em>Unregistered</em>
<% end %>
</tr>
<% end %>
</tbody>
</table>
But why? I mean, we’re using Ruby for Pete’s sake! How about a cleaner way to do the same thing?
<%= person_table(people_presenter.people, :class => 'people') %>
Okay, so that’s just a custom Rails helper method. Nothing special. But let’s look at the definition of the helper method! That’s where the special sauce is.
def person_table(people, attributes={})
TableView.new(@people, :class => 'people') do
define_column("First Name") do |person|
header_attributes!(:class => 'header')
row_attributes!(:class => person.registration_status)
template! do
person.first_name
end
end
define_column("Last Name") do |person|
template! do
person.last_name
end
end
define_column("Registration Status") do |person|
template! do
if person.registered?
content_tag(:strong, "Registered")
else
content_tag(:em, "Unregistered")
end
end
end
end
end