Where to start? Keep your user model simple. Think about what your
views are going to show, and what the code should look like.
Interview
belongs_to :interviewer, :class_name => 'User'
belongs_to :interviewee, :class_name => 'User'
User
has_many :interviews
This gets tricky, does this join with interviewer_id or interviewee_id
in interviews? You probably need two different names for these joins.
User
has_many :led_interviews, :class_name => 'Interview', :foreign_key
=> 'interviewer_id'
has_many :attended_interviews, :class_name => 'Interview',
:foreign_key => 'interviewee_id'
I find it's best to write some sanity tests to confirm all this. I
don't claim that this will work...
Now for the has_many :through join:
Job
has_many :interviews
has_many :interviewers, :through => :interviews
has_many :interviewees, :through => :interviews
This doesn't need a source, because it's going to look at
Interview#interviewer or Interview#interviewee by default. Has_many
:through associations are unique, they actually look at the other
association (the "source" association) and use its reflection data.
That's why there's no :class_name or :foreign_key option required.
Here's a simple case where :source would be used:
Comment
belongs_to :user
belongs_to article
Article
has_many :comments
has_many :users, :through => :comments
In this case, you may not want to use #users. One: it may not be
descriptive enough. Another reason is it may be too similar to
Article#user, a belongs_to association pointing to the Article's
author. So you can do this:
Article
has_many :comments
has_many :commenters, :through => :comments
Now you'll get some error about ActiveRecord not finding a #commenter
or #commenters association on Comment. Of course, it's called #user
instead!
Article
has_many :comments
has_many :commenters, :through => :comments, :source => :user