Rails enthält mit Bedingungen

In Rails> 3.2 ist es möglich, der vom erzeugten Join-Anweisung Bedingungen hinzuzufügenincludes Methode?

Angenommen, ich habe zwei Modelle, Person und Note. Jede Person hat viele Notizen und jede Notiz gehört einer Person. Jede Note hat ein Attributimportant.

Ich möchte, dass alle Leute nur die wichtigen Notizen vorladen. In SQL ist das:

SELECT *
FROM people
LEFT JOIN notes ON notes.person_id = people.id AND notes.important = 't'

In Rails können Sie dies nur auf ähnliche Weise tunincludes (Hinweis:joins Notizen werden nicht vorgeladen) wie folgt:

Person.includes(:notes).where(:important, true)

Dadurch wird jedoch die folgende SQL-Abfrage generiert, die eine andere Ergebnismenge zurückgibt:

SELECT *
FROM people
LEFT JOIN notes ON notes.person_id = people.id
WHERE notes.important = 't'

Bitte beachten Sie, dass die erste Ergebnismenge alle Personen und die zweite nur die Personen enthält, die mit wichtigen Notizen verknüpft sind.

Beachten Sie auch, dass: Bedingungen seit 3.1 veraltet sind.

Antworten auf die Frage(7)

Ihre Antwort auf die Frage