我用新scope
方法遇到了一点问题(Arel 0.4.0,Rails 3.0.0.rc)
基本上我有:
一个topics
模型, whichhas_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
or的东西group_by
,但我不太确定如何最好地去做。
任何建议/建议都非常感谢 - 我已经添加了 100 个代表的赏金,希望很快能找到一个优雅的解决方案。