Ruby on rails Rails:ActiveRecord预加载暗指我

Ruby on rails Rails:ActiveRecord预加载暗指我,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我无法理解ActiveRecordpreload方法是如何使用的 例如,当我执行时,User.preload(:posts),它会运行两个查询,但返回的内容与User.all相同。第二个查询似乎不会影响结果 User Load (3.2ms) SELECT "users".* FROM "users" Post Load (1.2ms) SELECT "posts".* FROM "posts" WHERE "posts"."user_id" IN (1, 2, 3) 有人能解释一下吗 谢

我无法理解ActiveRecord
preload
方法是如何使用的

例如,当我执行时,
User.preload(:posts)
,它会运行两个查询,但返回的内容与
User.all
相同。第二个查询似乎不会影响结果

User Load (3.2ms)  SELECT "users".* FROM "users"
Post Load (1.2ms)  SELECT "posts".* FROM "posts" WHERE "posts"."user_id" IN (1, 2, 3)
有人能解释一下吗


谢谢

输出相同,但当您调用
user.posts
时,Rails下次将不会从数据库加载您的帖子:

users = User.preload(:posts).limit(5) # users collection, 2 queries to the database
# User Load ...
# Post Load ...
users.flat_map(&:posts) # users posts array, no loads
users.flat_map(&:posts) # users posts array, no loads
你可以想做多少次就做多少次,Rails只是“记住”你在RAM中的帖子。这样做的想法是,您只需访问数据库一次