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