scope
新しいメソッド(Arel 0.4.0、Rails 3.0.0.rc)でわずかなブロックにぶつかりました
基本的に私は持っています:
topics
モデル、which has_many :comments
、およびcomments
モデル(topic_id
列付き)which belongs_to :topics
。
「ホットトピック」、つまり最近コメントされたトピックのコレクションを取得しようとしています。現在のコードは次のとおりです。
# models/comment.rb
scope :recent, order("comments.created_at DESC")
# models/topic.rb
scope :hot, joins(:comments) & Comment.recent & limit(5)
を実行するTopic.hot.to_sql
と、次のクエリが実行されます。
SELECT "topics".* FROM "topics" INNER JOIN "comments"
ON "comments"."topic_id" = "topics"."id"
ORDER BY comments.created_at DESC LIMIT 5
これは正常に機能しますが、重複するトピックが返される可能性があります-トピック#3が最近数回コメントされた場合、数回返されます。
私の質問
comments.created_at
最後の投稿がどれくらい前であったかを表示するために、まだフィールドにアクセスする必要があることを念頭に置いて、個別のトピックのセットを返すにはどうすればよいですか?distinct
またはの線に沿って何かを想像しますがgroup_by
、それについてどのように最善を尽くすのかよくわかりません。
どんなアドバイス/提案も大歓迎です-私はすぐにエレガントな解決策に到達することを期待して100レップの報奨金を追加しました。