Wie mache ich reflexive Selbst-Join-Beziehungen in Active?
-
06-07-2019 - |
Frage
Ich versuche, eine Social-Networking-Stil Freundschaft Modell zu implementieren und ich nicht viel, viel Glück haben versucht, die Plugins zur Verfügung da draußen, um herauszufinden. Ich glaube, ich Rails besser lernen würde, wenn ich es selbst tun. Also hier ist, was ich habe:
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
In irb
wenn ich versuche, dies:
friend1 = Friend.create(:name => 'Jack')
friend2 = Friend.create(:name => 'John')
bff = Friendship.create(:user_id =>1, :friend_id => 2)
f1.invited_friends
Ich erhalte eine Fehlermeldung:
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?
Expanation Freundschaftssystem:
- Ein Benutzer kann andere Nutzer einladen, zu Freunden werden.
- Benutzer, die Sie eingeladen zu Freunden werden durch
invited_friends
vertreten. - Benutzer, die Sie eingeladen, Freunde zu werden durch
inviter_friends
vertreten. - Ihr Gesamt Freund Liste wird von
invited_friends
+inviter_friends
vertreten.
Schema
table Friendship
t.integer :user_id
t.integer :friend_id
t.boolean :invite_accepted
t.timestamps
table User
t.string :name
t.string :description
Lösung
Ich bin überrascht, niemand den letzte Ryan Bates darauf hat Screen zum Thema :)
Hope, das hilft !.
Auszug aus Ryan‘... erfordert einen selbstbezüglicher Verein auf dem User-Modell Freunde / Anhänger zu definieren
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow