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.