Rails Arel sélectionnant des colonnes distinctes

J'ai atteint une légère bloc avec la nouvelle scope méthodes (Arel 0.4.0, Rails 3.0.0.rc)

Fondamentalement, je dois:

Un topics modèle, qui has_many :commentset un comments modèle (avec un topic_id colonne) qui belongs_to :topics.

Je suis en train de récupérer une collection de "Sujets Chauds", c'est à dire les sujets qui ont été récemment l'objet de commentaires. Actuel code est comme suit:

# models/comment.rb
scope :recent, order("comments.created_at DESC")

# models/topic.rb
scope :hot, joins(:comments) & Comment.recent & limit(5)

Si j'exécute Topic.hot.to_sqlla requête suivante est déclenché:

SELECT "topics".* FROM "topics" INNER JOIN "comments"
ON "comments"."topic_id" = "topics"."id"
ORDER BY comments.created_at DESC LIMIT 5

Cela fonctionne bien, mais il potentiellement renvoie les rubriques en double - Si le sujet n ° 3 a récemment été souligné plusieurs fois, il serait retourné plusieurs fois.

Ma question

Comment puis-je retourner un ensemble distinct de sujets, en gardant à l'esprit que j'ai encore besoin d'accéder à la comments.created_at le terrain, de montrer de quoi il y a longtemps que le dernier post a été? J'imagine que quelque chose le long des lignes de distinct ou group_bymais je ne suis pas trop sûr de la meilleure façon d'aller à ce sujet.

Tous les conseils /suggestions sont appréciés - j'ai ajouté un 100 rep bounty dans l'espoir d'en arriver à une solution élégante bientôt.

source d'informationauteur Jeriko