HOWTO: Upcoming birthdays partial

Maybe you shouldn't put business model in your view:

=> Person.rb
def self.find_upcoming_birthdays
   find_all(:conditions => "birthdate is NOT NULL")
end

def <=>(other)
   birthdate.strftime("%j").to_i <=>
   other.birthdate.strftime("%j").to_i
end

def age
   ((Date.today - birthdate)/365.2422).to_i
end

=> _upcoming_birthdays.rhtml
<table>
   <% @upcoming_birthdays.each do |upcoming_birthday| %>
     <tr>
       <td>
           <strong><%= link_to "#{upcoming_birthday.name}", :controller
=> 'people', :action => 'show', :id => upcoming_birthday %></strong><br
/>
           <%= upcoming_birthday.birthdate.strftime("%B %d") %><br />
           <em>will be pluralize(upcoming_birthday.age + 1,'year') old</em><br
/>
       </td>
     </tr>
   <% end %>
</table>

=> Controller
  @upcoming_birthdays = Person.find_upcoming_birthdays
  @upcoming_birthdays.delete_if {|person|
    Time.today.strftime("%j").to_i > person.birthdate.strftime("%j").to_i
  }
  @upcoming_birthdays.delete_if {|person|
    person.birthdate.strftime("%j").to_i > (Time.today.strftime("%j").to_i) + 31 }

  @upcoming_birthdays.sort!

Just my $0.02.

Here’s how I find upcoming/recent birthdays in a Person model:

Find people with birthdays around a given date.