【发布时间】:2011-04-03 01:18:36
【问题描述】:
我在使用新的 scope 方法(Arel 0.4.0,Rails 3.0.0.rc)时遇到了一点问题
基本上我有:
topics 模型,has_many :comments,comments 模型(带有topic_id 列),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 代表的赏金,希望尽快找到一个优雅的解决方案。
【问题讨论】:
标签: ruby-on-rails activerecord arel