HABTM 関係を持つ 2 つのモデルがあるとします。教師と生徒。これが私が現在取り組んでいるものの例です:
student_ids = [1,2,3,4]
Teacher.joins(:students).where("students.id" => student_ids)
問題は、これにより、これらの学生 ID のいずれかを持つすべての Teacher オブジェクトが返されるが、それらのすべてが必要ではないことです。
SELECT `teachers`.* FROM `teachers` INNER JOIN `students_teachers` ON `students_teachers`.`teacher_id` = `teachers`.`id` INNER JOIN `students` ON `students`.`id` = `students_teachers`.`student_id` WHERE `students`.`id` IN (1, 2, 3, 4)
2 つのケースがあり、そのうちの 1 つは OR 条件です。Student.id が 1 OR 2 OR 3 OR 4 の教師を見つける必要があるだけなので、上記は問題なく処理できます。もう 1 つは AND です。返される教師にはすべての Student_ids が含まれているため、Student.id が 1 AND 2 AND 3 AND 4 の教師です。