What's the purpose of index_by over group_by?

Nope, you've got it. Use index_by when each hash key only has one
value, use group_by when there are mutliples. Here are two examples:

@users = User.find(:all).index_by { |u| u.id }
@users[5] # => <User...>

@events = Event.find(:all).group_by { |e| e.created_at.to_date }
@events[Date.today] #=> [<Event>, <Event>, ...]