私はそれを持ってShow
いhas_many
Artists
ます。ショーをクエリすると、私:include
:artists
はそれに参加します。ただし、shows.first.artists.count
これを行うと、新しいクエリが作成されます。これはあまり効率的ではありません。
私の質問は
a) クエリにアーティストを含めるのはなぜですか?
b)これを停止し、count を呼び出すたびにクエリを回避するにはどうすればよいですか?
c) shows.first.artists.class は配列です - ActiveRecord は配列でこのメソッドをオーバーライドしていますか?
更新 コードとクエリは次のとおりです。
shows = Show.all :include => [:artists, :users], :limit => 12, :offset => 0
D, [2013-01-09T13:32:21.453346 #4659] DEBUG -- : Show Load (0.5ms) SELECT `shows`.* FROM `shows` WHERE `shows`.`deleted` = 0 LIMIT 12 OFFSET 0
D, [2013-01-09T13:32:21.497766 #4659] DEBUG -- : Artist Load (0.4ms) SELECT `artists`.* FROM `artists` WHERE `artists`.`id` IN (2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
D, [2013-01-09T13:32:21.513886 #4659] DEBUG -- : User Load (0.4ms) SELECT `users`.* FROM `users` WHERE `users`.`show_id` IN (2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13)
次に、 count に対して artits を操作すると、次のように artist に対してクエリが生成されます。
(0.4ms) SELECT COUNT(*) FROM `artists` WHERE `artists`.`show_id` = 2