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>