Frage

Einfache Aufgabe: gegeben, dass ein Artikel viele Kommentare hat, die Lage sein, in einer langen Liste von Artikeln angezeigt werden, wie viele Kommentare jeder Artikel hat. Ich versuche, wie zu erarbeiten, diese Daten mit Arel vorab zu laden.

Die "Komplexe Aggregationen" der README Datei scheint diese Art von Situation zu diskutieren, aber es ist nicht genau das Beispielcode zur Verfügung stellen, auch nicht bietet eine Möglichkeit, es in zwei Abfragen zu tun statt einer Join-Abfrage, die schlechter für die Leistung ist.

In Anbetracht der folgenden:

class Article
  has_many :comments
end

class Comment
  belongs_to :article
end

Wie kann ich Vorspannung für einen Artikel Satz, wie viele Kommentare jeder hat?

War es hilfreich?

Lösung

Sie können böse etwas tun mit SQL wie:

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

und dann würden Sie den Zugriff auf Article.first.count_comments haben.

Weitere (schöner) Methode, es zu tun ist, um die verwenden 'counter_cache' Feature / Option von belongs_to Assoziation.

Andere Tipps

Können Sie Zähler Cache nicht für diesen Einsatz?

belongs_to :article, :counter_cache => true

Sie müssen auch eine Migration haben, die die Spalte fügt comments_count

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top