我有两个模型
class Course
belongs_to :content_picture
end
class ContentPicture
end
当我尝试加载课程并急切加载所有图片时,我得到了 N+1 个查询,我想在两个查询中进行
我尝试过包含、联接eager_load
结果:
Course.all
给
Course Load (1.4ms) SELECT "courses".* FROM "courses"
ContentPicture Load (1.4ms) SELECT "content_pictures".* FROM "content_pictures" WHERE "content_pictures"."id" = $1 LIMIT 1 [["id", 8]]
ContentPicture Load (1.6ms) SELECT "content_pictures".* FROM "content_pictures" WHERE "content_pictures"."id" = $1 LIMIT 1 [["id", 7]]
包括:
Course.includes(:content_picture).all
结果在:
Course.includes(:content_picture).all
Course Load (1.6ms) SELECT "courses".* FROM "courses"
ContentPicture Load (1.1ms) SELECT "content_pictures".* FROM "content_pictures" WHERE "content_pictures"."id" = $1 LIMIT 1 [["id", 8]]
ContentPicture Load (1.0ms) SELECT "content_pictures".* FROM "content_pictures" WHERE "content_pictures"."id" = $1 LIMIT 1 [["id", 7]]
对于急切负载和连接,它是相同的。
由于@MrYoshiji的提示,我能够发现这是由于after_initialize块引起的
after_initialize do
self.content_picture ||= ContentPicture.new
end
删除块后,查询正常工作。
你会试试这个
Course.includes(:content_picture).where("content_picture.id = ?", content_picture_id)