Возможно ли в Rails > 3.2 добавить условия в оператор объединения, сгенерированный методом includes
?
Скажем, у меня две модели: Person и Note. У каждого человека есть много заметок, и каждая нота принадлежит одному человеку. Каждая нота имеет атрибут important
.
Я хочу найти всех людей, которые предварительно загружают только важные заметки. В SQL, который будет:
SELECT *
FROM people
LEFT JOIN notes ON notes.person_id = people.id AND notes.important = 't'
В Rails единственный способ сделать это - использовать includes
(примечание: joins
не будет предварительно загружать заметки) следующим образом:
Person.includes(:notes).where(:important, true)
Однако это приведет к генерации следующего SQL-запроса, который возвращает другой результирующий набор:
SELECT *
FROM people
LEFT JOIN notes ON notes.person_id = people.id
WHERE notes.important = 't'
Пожалуйста, обратите внимание, что первый набор результатов включает всех людей, а второй - только людей, связанных с важными заметками.
Также обратите внимание, что: условия устарели с 3.1.