我有一個Show
那has_many
Artists
。當我查詢一個節目時,我在其中有:include
:artists
。但是, 當我做shows.first.artists.count
,這會導致一個新的查詢 - 這不是很有效。activerecord:包括計數使另一個查詢?
我的問題是
一)爲什麼又是我查詢:在查詢的藝術家?
二)有什麼事阻止這一點,避免查詢的每次我叫計數
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)
然後我通過artsits爲計數interate並生成此查詢的藝術家:
(0.4ms) SELECT COUNT(*) FROM `artists` WHERE `artists`.`show_id` = 2
什麼是SQL第二個查詢? – Tyson
@Tyson我會更新我的問題,一秒鐘。 – 0xSina