Pregunta

tarea sencilla: dado que un artículo tiene muchos comentarios, poder mostrar en una larga lista de artículos de la cantidad de comentarios de cada artículo tiene. Estoy tratando de encontrar la manera de precarga estos datos con Arel.

La sección "Complejo agregaciones" del archivo README parece para hablar de ese tipo de situación, pero no ofrece exactamente código de ejemplo, ni ofrece una manera de hacerlo en dos consultas en lugar de una pregunta unida, lo que es peor para el rendimiento.

Dada la siguiente:

class Article
  has_many :comments
end

class Comment
  belongs_to :article
end

¿Cómo puedo cargar previamente para un conjunto de artículos cuántos comentarios tiene cada uno?

¿Fue útil?

Solución

Se puede hacer algo desagradable utilizando SQL como:

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

y entonces tendría acceso a Article.first.count_comments.

Otro método (mejor) de hacerlo es utilizar la 'counter_cache' característica / opción de belongs_to asociación.

Otros consejos

¿No puedes usar caché contador para esto?

belongs_to :article, :counter_cache => true

También necesita tener una migración que se suma la columna comments_count

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top