Lasst uns sagen, dass ich diese Beziehung haben:Rails umfasst mit mehreren Bedingungen
Users has_many Orders, Visits
Für jeden Benutzer, ich möchte ein Objekt komponieren wie so:
{Name: user.name, Orders: user.orders, Visits: user.visits}
Und ich möchte Besuche beschränken zu denjenigen, die im letzten Jahr vorkamen, und Ordnungen zu denjenigen, die im letzten Monat vorkamen. Im Moment bin ich versucht, diese Abfrage zu verwenden:
Users.includes(:Visits, :Orders).where('Visit.occurred_on > ?', 1.year.ago)
.where('Order.date > ?', 1.month.ago)
.references(:Visits, :Orders)
Das Problem ist, diese gibt nur die Benutzer, wo beide, wo die Bedingungen erfüllt sind, weil die Bedingungen angewandt werden, nachdem die Outer-Joins. Gibt es eine Möglichkeit, nur die Datensätze aufzunehmen, nach denen ich suche?
Es sind ein paar Probleme mit den Namenskonventionen verwendet, die Sie ausgeschaltet werden könnten werfen. Die Modellnamen sollten singulär sein (d. H. "Benutzer") und die Hash-Schlüssel in Kleinbuchstaben. Das 'includes' sollte dann von kleingeschriebenen, pluralisierten Symbolen sein. Schließlich sollten Ihre 'where' Klauseln den Namen der Datenbanktabelle in SQL enthalten - dies ist üblicherweise in Kleinbuchstaben, pluralisiert. Ich bin mir nicht sicher, ob das das Problem hier lösen wird - aber vielleicht einen Blick wert? – SRack