【发布时间】:2011-12-22 03:18:35
【问题描述】:
Rails 3 对 Activerecord 中的 .group() 结果进行排序的方式是什么(此处为“created_at”)?
@messages = Message.group(:foo)
只会显示最旧的消息。我需要显示最新的。
我试过了
@messages = Message.group(:foo).having("created_at = MAX(created_at)")
没有成功。任何提示表示赞赏!
澄清一下:我希望该组在其内部进行排序,而不是正常的messages.order("...")。 如果没有简单的 Activerecord 语法,我也会对原始 SQL 感到满意
更新:尝试 SQL 方式,这应该可以工作:
@messages = Message.find_by_sql("
SELECT messages.*
FROM messages
GROUP BY messages.foo
HAVING messages.created_at = MAX(messages.created_at)
ORDER BY messages.created_at DESC")
但这仅检索单个记录(未分组的记录)。据说分组的被省略了。不知道为什么,所有记录都有 :created_at 和 :foo 值
【问题讨论】:
标签: ruby-on-rails-3 activerecord group-by sql-order-by