ActiveRecord::Associations::AssociationProxyのloaded?メソッドでeager loadingを確認する
loaded?
メソッドを使うとeager loadingしているか確認することができるという話を聞いたので少し調べてみた。
使ったことがなかったけどActiveRecord::Associations::AssociationProxy
のloaded?
メソッドを使うと「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