¿Cómo hago relaciones reflexivas de auto-unión en ActiveRecord?

Estoy tratando de implementar un modelo de amistad de estilo de redes sociales y no tuve mucha suerte tratando de descubrir los complementos disponibles por ahí. Creo que aprenderé Rails mejor si lo hago yo mismo. Así que aquí está lo que tengo:

<code>class User < ActiveRecord::Base
  has_many :invitee_friendships ,
           :foreign_key => :friend_id,
           :class_name => 'Friendship'

  has_many :inviter_friends,
            :through => :invitee_friendships

  has_many :inviter_friendships ,
           :foreign_key => :user_id,
           :class_name => 'Friendship'

  has_many :invited_friends,
            :through => :inviter_friendships

end

class Friendship < ActiveRecord::Base
  belongs_to :user
  //I think something needs to come here, i dont know what
end
</code>

Enirb cuando intento esto:

<code>friend1  = Friend.create(:name => 'Jack')
friend2  = Friend.create(:name => 'John')
bff = Friendship.create(:user_id =>1, :friend_id => 2)
f1.invited_friends
</code>

Me sale un error:

<code>ActiveRecord::HasManyThroughSourceAssociationNotFoundError:
Could not find the source
association(s) :invited_friend or
:invited_friends in model Friendship. 
Try 'has_many :invited_friends,
:through => :invited_friendships,
:source => <name>'.  Is it one of
:user?
</code>

Sistema de expansión de la amistad:

Un usuario puede invitar a otros usuarios a convertirse en amigos.Los usuarios que invitaste a ser amigos están representados porinvited_friends.Los usuarios que te invitaron a ser amigos están representados porinviter_friends.Tu lista total de amigos está representada porinvited_friends + inviter_friends.

Esquema

<code>table Friendship
      t.integer :user_id
      t.integer :friend_id
      t.boolean :invite_accepted
      t.timestamps

table User
    t.string :name
    t.string :description
</code>

Respuestas a la pregunta(1)

Su respuesta a la pregunta