Posso obter a mesma saída da consulta SQL abaixo usando o ActiveRecord?
SELECT d.title, COUNT(ep.*)
FROM posts d
LEFT JOIN comments ep
ON d.title = ep.post_title
GROUP BY d.title;
Tentei Post.joins(:comments).group(:title).count('comments.*')
.
Posso obter a mesma saída da consulta SQL abaixo usando o ActiveRecord?
SELECT d.title, COUNT(ep.*)
FROM posts d
LEFT JOIN comments ep
ON d.title = ep.post_title
GROUP BY d.title;
Tentei Post.joins(:comments).group(:title).count('comments.*')
.
Seu relacionamento, ou pelo menos esse pedido, é muito pouco convencional.
Normalmente
comments
estaria relacionadoposts
por meio da adição de apost_id
àcomments
tabela.Dito isto, se este não for o caso, você pode adicionar o relacionamento usando o título da seguinte maneira:
Então você pode usar
Post.left_joins(:comments).group(:title).count('comments.*')
Se você já tem um relacionamento natural configurado e, por algum motivo, está tentando criá-lo como uma consulta associada única, você pode fazer isso da seguinte maneira.
Ambos produzirão o SQL desejado (sem o aliasing) e retornarão um
Hash
no formato de{"post_title_1" => count_of_comments, "post_title_2" => count_of_comments, ...}