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?

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top