2016-12-09 4 views
0

Also arbeite ich mit dem Ruby ORM und versuche, Viele-zu-Viele-Syntax und Polymorphie zu verstehen. Hier sind meine Active Record Beziehungen so weit.Ruby ORM polymorphe Beziehungen, Active Record

class Association < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :friend, class_name: "User" 
end 

und

class User < ActiveRecord::Base 
    has_many :associations 
    has_many :friends, through: :associations 
end 

Ich kann nicht eine Liste von Freunden pro Benutzer zu bekommen scheinen, wenn die Freunde, mit mehr als einem Benutzer zugeordnet sind. Mit anderen Worten, einige Benutzer haben Freunde und diese Freunde können auch mehr als eine Benutzervereinigung haben.

Antwort

0

Zunächst sind dies keine polymorphen Assoziationen. Man verwendet polymorphe Assoziationen, wenn ein Modell zu vielen Modellen gehören könnte, wie ein Comment Modell. Ein Benutzer kann einen Beitrag, ein Bild oder ein Projekt kommentieren, so dass das Modell Comment zu einem dieser Objekte gehören kann. Daher verwenden wir polymorphe Assoziationen. Read here um mehr darüber zu erfahren.

Nun, das, was Sie fragen, ist über Inverse Freunde, und hier ist, wie Sie es implementieren können.

class User < ActiveRecord::Base 
    has_many :associations 
    has_many :friends, through: :associations 
    has_many :inverse_associations, class_name: "Association", foreign_key: :friend_id 
    has_many :inverse_friends, through: :inverse_associations, source: :user 
end 

class Assocation < ActiveRecord::Base 
    belongs_to :user 
    belogns_to :friend, class_name: 'User' 
    belongs_to :inverse_friend, class_name: 'User', foreign_key: :friend_id 
end