之前有使用,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问题
最新推荐文章于 2022-10-13 17:22:01 发布