Количество загруженных ассоциаций с Arel (Rails 3) - PullRequest
3 голосов
/ 08 апреля 2010

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

В разделе «Сложные агрегации» файла README , по-видимому, обсуждается ситуация такого типа, но он не предлагает точно пример кода и не предлагает способ сделать это в двух запросах одного присоединенного запроса, что хуже для производительности.

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

class Article
  has_many :comments
end

class Comment
  belongs_to :article
end

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

Ответы [ 2 ]

4 голосов
/ 28 июля 2010

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

belongs_to :article, :counter_cache => true

Вы также должны иметь миграцию, которая добавляет столбец comments_count

2 голосов
/ 08 апреля 2010

Вы можете сделать что-то неприятное, используя 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 из own_to Ассоциации.

...