

自分の認識では、変数に代入すればメモリにキャッシュされることでSQLが発行しなくなくなるはずなのですが  
変数に代入しても普通にSQLが発行していて混乱をきたしています。

以下はわかります

[code]

    irb(main):002:0> users = User.all
    User Load (0.6ms)  SELECT  "users".* FROM "users" LIMIT ?  [["LIMIT", 11]]
    
[/code]

ですが、以下でもSQLが発行しているのが謎です。  
変数に代入したことでメモリにキャッシュされているはずなのでSQLが発行しないはずです。

[code]

    irb(main):003:0> users
    User Load (0.5ms)  SELECT  "users".* FROM "users" LIMIT ?  [["LIMIT", 11]]
    
[/code]

preloadも同様です。以下はわかります。

[code]

    irb(main):004:0> users = User.preload(:posts)
      User Load (0.6ms)  SELECT  "users".* FROM "users" LIMIT ?  [["LIMIT", 11]]
      Post Load (4.5ms)  SELECT "posts".* FROM "blogs" WHERE "posts"."user_id" IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11) ORDER BY "blogs"."created_at" DESC
    
[/code]

ですが、キャッシュしたはずなのに再度SQLが発行しています。

[code]

    irb(main):006:0> users
      User Load (1.4ms)  SELECT  "users".* FROM "users" LIMIT ?  [["LIMIT", 11]]
      Blog Load (5.4ms)  SELECT "blogs".* FROM "blogs" WHERE "blogs"."user_id" IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11) ORDER BY "blogs"."created_at" DESC
    
[/code]

## 質問

変数に代入したのに、変数を実行すると再度SQLが発行されるのは何故ですか？


CC BY-SA 4.0
2020-06-14T08:54:38.457
67653
2020-06-14T08:54:38.457
40650
question
ruby-on-rails sql rails-activerecord
allやpreloadでメモリにキャッシュできてない？？