Question

Tâche simple: étant donné qu'un article a beaucoup de commentaires, pouvoir afficher dans une longue liste d'articles combien de commentaires chaque article a. Je suis en train de travailler sur la façon de précharger ces données avec Arel.

La section "agrégations complexe" du fichier README semble pour discuter de ce type de situation, mais il ne propose pas exactement un exemple de code, et n'offre une façon de le faire en deux requêtes au lieu d'une requête a rejoint, ce qui est pire pour la performance.

Dans le cas suivant:

class Article
  has_many :comments
end

class Comment
  belongs_to :article
end

Comment puis-je précharger un article mis combien de commentaires ont chacun?

Était-ce utile?

La solution

Vous pouvez faire quelque chose de méchant en utilisant SQL comme:

default_scope :select => 'articles.*, (select count(comments.id) from comments where comments.article_id = articles.id) as count_comments'

et alors vous avez accès à Article.first.count_comments.

Une autre (plus agréable) méthode pour le faire est d'utiliser la fonction / option 'counter_cache' belongs_to association .

Autres conseils

Tu ne peux pas utiliser le cache de compteur pour cela?

belongs_to :article, :counter_cache => true

Vous devez également avoir une migration qui ajoute la colonne comments_count

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top