之前有使用,eager_load preload 来减少N+1问题, 后来发现includes更好用,可以嵌套关联。像这样子:Inquiry.includes(:inquiry_manager,:contact,inquiry_items: :chemical) 今天关联一个表的时候发现死活还是遇到N+1问题,后来才发现,自己在关联类中定义了一个实例方法重写了sql。 def package_info inquiry_items.pluck(:name,:package,:unit).join("").join(";") end 这里的 inquiry_items.pluck 会重新再查找inquiry和inquiry_items的关系 修改方法,就是用循环来写: def package_info inquiry_items.each do | item| #这样就不会再关联了。 end end
关于includes后遇到的N+1问题
猜你喜欢
转载自schooltop.iteye.com/blog/2311414
今日推荐
周排行