データベース内の各投稿からコメント数を取得しようとしています。ただし、次のとおりです。
Post.includes(:comments).group("posts.id").count("comments.id")
生成された sql が includes() を完全に無視しているように見えるため、mysql エラー「Unknown column comments.id」が発生します。
SELECT COUNT(comments.id) AS count_comments_id, posts.id AS posts_id
FROM `posts` GROUP BY posts.id
興味深いことに、includes() を joins() に置き換えると、動作する SQL が生成されます。
Post.joins(:comments).group("posts.id").count("comments.id")
SELECT COUNT(comments.id) AS count_comments_id, posts.id AS posts_id
FROM `posts` INNER JOIN `comments` ON `comments`.`post_id` = `posts`.`id`
GROUP BY posts.id
しかし、上記のクエリは、コメントが 0 のすべての投稿を除外します。これは私が望むものではありません。私が必要とするのは、次の SQL を生成することです (ただし、SQL を記述せずに、彼は彼を)
SELECT COUNT(comments.id) AS count_comments_id, posts.id AS posts_id
FROM `posts` LEFT OUTER JOIN `comments` ON `comments`.`post_id` = `posts`.`id`
GROUP BY posts.id