fkm_y' log

技術や日常のログ

ActiveRecord::Associations::AssociationProxyのloaded?メソッドでeager loadingを確認する

loaded?メソッドを使うとeager loadingしているか確認することができるという話を聞いたので少し調べてみた。 使ったことがなかったけどActiveRecord::Associations::AssociationProxyloaded?メソッドを使うと「SQLクエリを発行し、 オブジェクトを取得しているか」を確認することができるらしい。

loaded?メソッドは以下のように使用して確認できる。

class Client < ApplicationRecord
  has_many :users
end


> Client.first.users.loaded?
# SQLクエリ(略)
# => false

> users = Client.first.users
# SQLクエリ(略)
> users.loaded?
# => true

事前にSQLクエリを発行してオブジェクトを取得していることは確認できても、特定のrelationをeager loadingしていることを確認できないと思ったけど、以下のようにして確認できた。

class Client < ApplicationRecord
  has_many :users
end

> clients = Client
# SQLクエリ(略)
> clients.first.users.loaded?
# => false

> clients = Client.eager_load(:users)
# SQLクエリ(略)
> clients.first.users.loaded?
# => true

参考