2016-08-21 2 views
0

Ich arbeite an einer Berichtsfunktion für eine Rails-App, bei der Benutzer mit Personen in Büros Kontakt aufnehmen. Ein Büro hat viele Menschen und eine Person hat viele Kontakte.Filter schließt verschachtelte Beziehung ein

Ich möchte alle Büros abfragen, die in einem Zeitraum kontaktiert wurden, und alle Personen in den Büros, die in diesem Zeitraum kontaktiert wurden, aber keine Personen in den Büros, die in diesem Bereich nicht kontaktiert wurden . Mit anderen Worten, wenn zwei Personen im Büro sind und eines im Bereich kontaktiert wurde und eines nicht, dann möchte ich nur das in diesem Bereich kontaktierte einschließen.

Die Abfrage ich mit dem Schreiben begann wie folgt aussieht:

Office.includes(:contacts, :people).where('contacts.created_at >= ? AND contacts.created_at <= ?', @from_date, @to_date) 

Aber diese filtert die Kontakte, nicht die Menschen. Dann habe ich versucht diese:

Office.includes(:contacts, :people).where('people.contacts.created_at >= ? AND people.contacts.created_at <= ?', @from_date, @to_date) 

Aber das gibt mir Unknown column 'voters.call_attempts.created_at', was total Sinn macht. Jetzt bin ich mir nicht sicher, wohin ich von hier aus gehen soll.

Jeder Rat wird sehr geschätzt! Danke im Voraus.

Antwort

1

Ich denke, Sie sind sehr nah - basierend auf den Assoziationen, die Sie beschrieben haben, sollten Sie in der Lage sein, nur die includes Aussage ein wenig zu ändern. Versuchen Sie anstelle von includes(:contacts, :people)includes(people: :contacts). Dies wird alle Kontakte über Personen erhalten. Sie können es sogar bis zu includes(:contacts) herunterfahren, wenn Sie eine Beziehung zwischen Office und Kontakte eingerichtet haben.

+0

Das funktioniert! Danke @moof! – michael

Verwandte Themen