Ich versuche, ein Social-Networking-Stil-Freundschaftsmodell zu implementieren, und ich hatte nicht viel Glück beim Versuch, die verfügbaren Plugins herauszufinden. Ich denke, ich werde Rails besser lernen, wenn ich es selbst mache. Also hier ist, was ich habe:Wie mache ich reflexive Self-Join-Beziehungen in ActiveRecord?
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 Benutzer einladen, Freunde zu werden.
- Benutzer, die Sie eingeladen haben, Freunde zu werden, werden durch
invited_friends
dargestellt. - Benutzer, die Sie eingeladen haben, Freunde zu werden, werden durch
inviter_friends
dargestellt. - Ihre gesamte Freundesliste wird durch
invited_friends
+inviter_friends
repräsentiert.
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
welche Fehler bekommen Sie? –
hat gerade den Fehler hinzugefügt – udit
Pls bieten das vollständige Schema. Die Plugin-Rake-Aufgabe Annotate Models - http://pragdave.pragprog.com/pragdave/2006/02/annotate_models.html und http://agilewebdevelopment.com/plugins/annotate_models - ist dafür sehr hilfreich. Es dokumentiert die Schemas der Modelle als Kommentare in den Modelldateien. –