3rd Sun
最近のActiveRecordとEagerLoading
SQLのログを見ていて気がついたのですが、
最近のActiveRecordは以下のようにEagerLoadingしようとすると、
こんな感じのSQLを発行します。
rails>>
?> Article.find(:all, :include => [:user => :face]);1
=> 1
Article Load (0.005234) SELECT * FROM
articles
User Load (0.000645) SELECT * FROMusersWHERE (users.id IN ('13','9','37','17','1','3'))
Face Load (0.002931) SELECTfaces.* FROMfacesWHERE (faces.user_id IN (1,3,9,13,17,37))
<<--
以前のようにJOINを使わずに、3回に分けるようになっているのですね。
しかしながら、条件が複雑になってくると、
:limitオプションとの相性が悪いケースがあるようで、
まだ若干バグがあるようです。
そんな時は手で:joinsを書いています。
posted by
genki on Sun 3 Aug 2008 at 22:11 with 0 comments