Wie mache ich reflexive Self-Join-Beziehungen in ActiveRecord?

Ich versuche, ein Freundschaftsmodell im Social-Networking-Stil zu implementieren, und ich hatte nicht viel Glück beim Versuch, die verfügbaren Plugins herauszufinden. Ich denke, ich lerne Rails besser, wenn ich es selbst mache. Also hier ist was ich habe:

<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>

Imirb wenn ich das versuche:

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

Ich erhalte einen Fehler:

<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>

Erweiterung des Freundschaftssystems:

Ein Benutzer kann andere Benutzer einladen, Freunde zu werden.Benutzer, die Sie eingeladen haben, Freunde zu werden, werden von vertreteninvited_friends.Benutzer, die Sie eingeladen haben, Freunde zu werden, werden von vertreteninviter_friends.Ihre gesamte Freundesliste wird durch dargestelltinvited_friends + inviter_friends.

Schema

<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>

Antworten auf die Frage(1)

Ihre Antwort auf die Frage