我有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)
然后我通过 artits 对 count 进行交互,它为艺术家生成这个查询:
(0.4ms) SELECT COUNT(*) FROM `artists` WHERE `artists`.`show_id` = 2