我有一个控制器找到1条记录(其uniq)
class CollectionsController < ApplicationController
def show
@collection = Collection.find_by_active(true)
end
end
这个'@collection'有很多:项目,有很多:照片
因此,在视图中它看起来像这样:
- @collection.items.each do |item|
= image_tag item.find_active_photo.image_url(:small)
它会重现一堆SQL查询,例如,如果项目有4张照片,则会有6个查询:
Collection Load
CollectionItem Load
Photo Load (4 times)
如何减少此N + 1查询的数量?
答案 0 :(得分:1)
使用预先加载
@collection = Collection.find_by_active(true, {:include =>{:items => :photos})
答案 1 :(得分:0)
ActiveRecord有一个“包含”方法。它允许预加载记录。
Collection.find_by_active(true).includes(:items)
不确定,如果您可以执行includes(items: :photo)
之类的操作,请尝试一下。
答案 2 :(得分:0)
对于Rails 4
@collection = Collection.includes(items: :photos).find_by_active(true)