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

时间:2014-08-04 22:57:26

标签: sql ruby-on-rails

我对rails上的ruby相对较新,而我目前正在处理的主要任务之一就是减少生成的查询数量。我已经意识到使用includes实现的关联的Eager Loading。但是,当表没有关联时,我不完全确定如何处理这些情况。

我的代码流看起来像这样:

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未引用。有没有办法减少给定此流程的查询数量?

1 个答案:

答案 0 :(得分:0)

如果Table1不属于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)