Associação de carregamento ansioso contagem com Arel (Rails 3)
-
25-09-2019 - |
Pergunta
Tarefa simples: dado que um artigo tem muitos comentários, pode ser capaz de exibir em uma longa lista de artigos quantos comentários cada artigo possui. Estou tentando descobrir como pré -carregar esses dados com a Arel.
A seção "agregações complexas" do Leia-me O arquivo parece discutir esse tipo de situação, mas não oferece exatamente código de exemplo, nem oferece uma maneira de fazê -lo em duas consultas, em vez de uma consulta ingressada, o que é pior para o desempenho.
Dado o seguinte:
class Article
has_many :comments
end
class Comment
belongs_to :article
end
Como posso pré -carregar para um artigo definido quantos comentários cada um tem?
Solução
Você pode fazer algo desagradável usando o SQL como:
default_scope :select => 'articles.*, (select count(comments.id) from comments where comments.article_id = articles.id) as count_comments'
e então você teria acesso ao artigo.first.count_comments.
Outro método (mais agradável) para fazer é usar o recurso/opção 'contador_cache' de pertence a Associação.
Outras dicas
Você não pode usar o contador de cache para isso?
belongs_to :article, :counter_cache => true
Você também precisa ter uma migração que adiciona a coluna Comentários_count