4th
Mon
自分でEager Loadingが行われるタイミングを決める方法
このところ、named_scop
上記サイトでも紹介されているように、
今まではLEFT OUTER JOIN
を使って、
一回のクエリで全て読み込むようなSQLを生成していたのですが、
Rails2.1からは、複数回のクエリに分割するようになりました。
ということで、Eager Loadingを実際にやっているコードを調べてみたのですが、自分で好きなタイミングでEager Loadingを行う方法を見つけたので紹介します。
ActiveRecoActiveReco
を利用します。
1 articles = Article.all(:limit => 5) 2 Article.send :preload_associations , articles, [:user => :face]
1行目は普通にEager LoadingせずにArticleリストを取得していますが、 二行目を実行することで、各ArticleのアソシエイションがEager Load されます。あとは、
1 articles.first.user.face
などを実行してもSQLクエリは発行されません。
実質的に発行されるSQLは通常の:include
を指定した場合と同じになるので、好きなタイミングでEager Load
を実行できるようになったといえます。
posted by
genki
on Mon 4 Aug 2008
at 21:10