Szyny zawierają warunki
Czy jest możliwe w Railsach> 3.2 dodawanie warunków do instrukcji łączenia generowanej przezincludes
metoda?
Powiedzmy, że mam dwa modele, Person i Note. Każda osoba ma wiele notatek, a każda notatka należy do jednej osoby. Każda notatka ma atrybutimportant
.
Chcę znaleźć wszystkich ludzi, którzy wczytują tylko ważne notatki. W języku SQL, które będą:
SELECT *
FROM people
LEFT JOIN notes ON notes.person_id = people.id AND notes.important = 't'
W Railsach jedynym podobnym sposobem jest użycieincludes
(Uwaga:joins
nie wczytuje notatek) w ten sposób:
Person.includes(:notes).where(:important, true)
Jednak spowoduje to wygenerowanie następującego zapytania SQL, które zwróci inny zestaw wyników:
SELECT *
FROM people
LEFT JOIN notes ON notes.person_id = people.id
WHERE notes.important = 't'
Zauważ, że pierwszy zestaw wyników zawiera wszystkie osoby, a drugi tylko osoby powiązane z ważnymi notatkami.
Zauważ również, że: warunki są przestarzałe od 3.1.