J'ai un modèle de personne:Sortons personnes ActiveRecord reliant deux personne donnée
has_many :from_relationships, :class_name => "Relationship", :foreign_key => "from_person_id"
has_many :to_relationships, :class_name => "Relationship", :foreign_key => "to_person_id"
et un modèle de relation avec:
belongs_to :from_person, :class_name => "Person"
belongs_to :to_person, :class_name => "Person"
Étant donné une personne p1, je veux mettre en œuvre la méthode d'instance p1.people_connecting_to (p2) qui renvoie toutes les personnes qui lient indirectement p1 à l'autre personne p2. Par exemple, si j'ai les relations suivantes:
- p1 => p3 => p2
- p1 => p4 => p2
- p1 => p5 => p6 => p2
Je veux que p1.people_connecting_to (p2) retourne [p3, p4]. Est-il possible de réaliser en une seule requête SQL via ActiveRecord?
Merci :)
EDIT:
Merci Ed, votre réponse me conduit à la solution suivante. J'ai ajouté:
has_many :to_relations, :source => :to_person, :through => :from_relationships
has_many :from_relations, :source => :from_person, :through => :to_relationships
et mis en œuvre people_connecting_to
comme ceci:
def people_connecting_to(other_person)
to_relations.joins(:from_relationships).where(:"from_relationships_people.to_person_id" => other_person.id)
end