关于includes后遇到的N+1问题

之前有使用,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


猜你喜欢

转载自schooltop.iteye.com/blog/2311414
今日推荐