Ruby on rails 为集合缓存相关的ActiveRecord对象
我想选择一组ActiveRecord对象,它们的Ruby on rails 为集合缓存相关的ActiveRecord对象,ruby-on-rails,activerecord,ruby-on-rails-4,Ruby On Rails,Activerecord,Ruby On Rails 4,我想选择一组ActiveRecord对象,它们的属于相关对象,只需完成一次查询。即在打电话之后 products = Product.joins(:image).limit(10) 在迭代products时,我希望product.image不会导致对数据库的另一个查询,但是它的image属性已经填充了从以前的查询中缓存的image实例 如何为select构造参数,以便它选择填充相关对象所需的所有属性?或者我看的方向不对,有其他方法可以减少每次迭代中不必要的查询: Image Load (1.0
属于相关对象,只需完成一次查询。即在打电话之后
products = Product.joins(:image).limit(10)
在迭代products
时,我希望product.image
不会导致对数据库的另一个查询,但是它的image
属性已经填充了从以前的查询中缓存的image
实例
如何为select
构造参数,以便它选择填充相关对象所需的所有属性?或者我看的方向不对,有其他方法可以减少每次迭代中不必要的查询:
Image Load (1.0ms) SELECT "images".* FROM "images" WHERE "images"."id" = 270783 LIMIT 1
Image Load (1.2ms) SELECT "images".* FROM "images" WHERE "images"."id" = 121344 LIMIT 1
Image Load (1.2ms) SELECT "images".* FROM "images" WHERE "images"."id" = 196239 LIMIT 1
Image Load (1.2ms) SELECT "images".* FROM "images" WHERE "images"."id" = 91194 LIMIT 1
Image Load (1.2ms) SELECT "images".* FROM "images" WHERE "images"."id" = 116278 LIMIT 1
Image Load (1.2ms) SELECT "images".* FROM "images" WHERE "images"."id" = 117207 LIMIT 1
Image Load (0.8ms) SELECT "images".* FROM "images" WHERE "images"."id" = 244471 LIMIT 1
Image Load (0.8ms) SELECT "images".* FROM "images" WHERE "images"."id" = 239287 LIMIT 1
Image Load (0.8ms) SELECT "images".* FROM "images" WHERE "images"."id" = 15124 LIMIT 1
Image Load (1.2ms) SELECT "images".* FROM "images" WHERE "images"."id" = 186670 LIMIT 1
你想要的是所谓的“急切加载”。您所要做的就是将.joins(:image)
更改为.includes(:image)
以获得快速加载
products = Product.includes(:image).limit(10)
另请参见。完美!正是我需要的。几乎可以,因为我认为可以用一个查询而不是两个查询来完成,但这并不重要。