Rails включает в себя условия
Возможно в Rails> 3.2 добавить условия в оператор соединения, сгенерированныйincludes
метод?
Допустим, у меня есть две модели, Персона и Примечание. У каждого человека есть много заметок, и каждая заметка принадлежит одному человеку. Каждая заметка имеет атрибут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.