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>, ...]