User.find(7).comments.map{|c| c.reactions.count}.sum User Load (0.8ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 7 LIMIT 1 Note Load (0.6ms) SELECT `comments`.* FROM `comments` WHERE `comments`.`user_id` = 7 (0.5ms) SELECT COUNT(*) FROM `reactions` WHERE `reactions`.`comment_id` = 21 (0.5ms) SELECT COUNT(*) FROM `reactions` WHERE `reactions`.`comment_id` = 22 (0.4ms) SELECT COUNT(*) FROM `reactions` WHERE `reactions`.`comment_id` = 28
こんな感じになります。N+1問題
User.find(7).comments.includes(:reactions) User Load (0.9ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 7 LIMIT 1 Note Load (1.2ms) SELECT `comments`.* FROM `comments` WHERE `comments`.`user_id` = 7 NoteReaction Load (0.6ms) SELECT `reactions`.* FROM `reactions` WHERE `reactions`.`comment_id` IN (21,22,28)
なんか良さそう。
この次の書き方がわかりません。
.mapと続けると結局in
が使われずに計算されてしまって。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。