减少生成的sql查询- ruby on rails



我对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)

最新更新