假设我有两个具有 HABTM 关系的模型。师生。这是我目前正在工作的示例:
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)
我有两种情况,其中一种是 OR 条件,上面处理得很好,因为我只需要找到 Student.id 1 OR 2 OR 3 OR 4 的教师。另一种是 AND,我需要确保返回的教师包括所有 student_id,因此 Student.id 为 1 AND 2 AND 3 AND 4 的教师。