Стремление с нетерпением грузовой ассоциации с Arel (Rails 3)

StackOverflow https://stackoverflow.com/questions/2596783

Вопрос

Простая задача: Учитывая, что в статье есть много комментариев, сможем отображать в длинном списке статей, сколько комментариев есть. Я пытаюсь выработать, как предварительно загрузить эти данные с Arel.

Раздел «сложных агрегаций» ПРОЧТИ МЕНЯ Файл, по-видимому, обсуждает этот тип ситуации, но он не точно предлагает образец код, и не предлагает ли он способа сделать это в двух запросах вместо одного присоединения к запросу, что хуже для производительности.

Учитывая следующее:

class Article
  has_many :comments
end

class Comment
  belongs_to :article
end

Как я могу предварительно загрузить для статьи, сколько комментариев у каждого есть?

Это было полезно?

Решение

Вы можете сделать что-то противное, используя SQL, как:

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

И тогда у вас будет доступ к Article.First.count_Comments.

Другой (приятный) метод для этого - использовать функцию / опцию «Counter_cache» от принадлежит Ассоциация.

Другие советы

Вы не можете использовать встречный кэш для этого?

belongs_to :article, :counter_cache => true

Вам также необходимо иметь миграцию, которая добавляет колонну Комментарии_Count

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top