---
title: extra action
teaser:
tags: web,rails
author: Jared Carroll
published_on: 2008-03-28
---

The following code samples, taken from a controller, demonstrate different ways
of creating a Referral with or without a Team.  A Referral represents one user
inviting another eventual user to the site and optionally to their Team.
Whether this is the best way to model this doesn't matter, right now, I just
want to take a look at a couple different code samples.

    if session[:team_id].blank?
      Referral.create(:user => current_user,
                      :referer => referer)
    else
      Referral.create(:user => current_user,
                      :referer => referer,
                      :team => Team.find(session[:team_id]))
    end

Very straightforward, nothing special there. Here's another version:

    Referral.create(:user => current_user,
                    :referer => referer,
                    :team => Team.find_by_id(session[:team_id]))

Much more succinct by relying on the `#find_by_id` hack.  I really don't like
that `#find_by_id`.  To me it's lazy coding along the lines of this:

```erb
<%= h user.address.street rescue '' %>
```

instead of putting a conditional:

```erb
<% unless user.address.nil? %>

<%= h user.address.street %>
<% end %>
```

Nobody likes conditional logic but come on.

Ok, let's look at another version.

      unless session[:team_id].blank?
        team = Team.find session[:team_id]
      end
      Referral.create(:user => current_user,
                      :referer => referer,
                      :team => team)

Now you might think that's not going to work when that condition is true, but
through some crazy hack in Ruby it does not raise an error.  I didn't realize
about that until recently, not sure how commonly known it is.  And for that
reason I'm going to have to outlaw this version as being way too tricky.

What do you guys think?
