假设我有一个Teachers表,其中包含:has_and_belongs_to_many与Students表的关系。我有一个students_teachers表,映射字段[teacher_id,student_id]。
当我进行一项发现并希望与所有学生一起培养所有老师时,我会做:
Teacher.find(:all, :include => :students)
虽然我已经包含了学生表,但我仍然最终得到了一个查询,提出了教师,然后n再次查询students_teachers表,而n是从第一个查询返回的教师数。
为什么Rails没有加入students_teachers表而是发送了这么多查询?
答案 0 :(得分:0)
这是Rails急切加载的预期行为,以防止N + 1问题(即必须运行查询以查找所有教师,然后每位教师再查询一次以查找所有学生。)请参阅{{3} }。
如果您想在较少的查询中执行此操作,则需要使用:joins