我对ruby on rails比较陌生,我目前的主要任务之一是减少生成的查询数量。我已经意识到我使用includes
实现的关联的急切加载。但是,我不完全确定如何处理表不关联的情况。
我的代码流看起来像这样:
t1 = table1.where('id in (:id)', :id => id_list).all
t1.each do |x1|
t2 = table2.where(t2_id: x1[:t2_id]).all
t2.each do |x2|
t3 = table3.where('id1 = ? and id2 = ?',t2[:id],t1[:id]).all
t3.each do |x3|
.....
这是代码的一般流程。没有引用表1、表2和表3。是否有一种方法可以减少给定此流的查询数量?
如果Table1没有belongs_to Table2和Table3应该有has_many Table1和Table2,我认为你应该添加它,我不明白为什么你不能
无论如何,你可以这样做:
Table1.eager_load(:table2, :table3).where('table1.id in (:id) AND table2.id = table1.t2_id AND table3.id1 = table1.id AND table3.id2 = table2.id', id: id_list)