В моих моделях часто встречаются ассоциации has_many. Мне также часто нужно отображать, сколько их (то есть assoc.count). Это заставляет выполнить другой запрос, как показано ниже:
ruby-1.8.7-p334 :020 > Instructor.first.instructors_lessons.count
Instructor Load (0.5ms) SELECT `users`.* FROM `users` INNER JOIN `instructor_profiles` ON `instructor_profiles`.`instructor_id` = `users`.`id` LIMIT 1
SQL (1.2ms) SELECT COUNT(*) FROM `instructors_lessons` WHERE (`instructors_lessons`.instructor_id = 2817)
Это хорошо, когда есть один или два, но когда есть 100+, этот процесс становится заметно медленным.
Пожалуйста, посмотрите на этот чрезвычайно медленный процесс (http://pastebin.com/p4Sj7q7s). Я работал над одной очень медленной страницей с кэшированием.
Я могу поместить это в запрос следующим образом: но это утомительно и отчасти противоречит цели ассоциаций ActiveRecord, которые я чувствую:
select("instructors.*, count('instructors_lessons.instructor_id') as num_lessons").
Но тогда я не могу просто сказать instructor.lessons.count ...
Есть ли способ использовать joins () или include (), чтобы этот дополнительный запрос COUNT () не требовался?