包括不急于加载belongs_to



我有两个模型

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)

最新更新