ruby-on-rails-3 – Rails 3:.group()按created_at排序
发布时间:2020-12-16 19:40:31 所属栏目:百科 来源:网络整理
导读:什么是Rails 3的方式来排序.group()导致Activerecord(这里是“created_at”)? @messages = Message.group(:foo) 只会显示最旧的消息.我需要最新的显示. 我试过了 @messages = Message.group(:foo).having("created_at = MAX(created_at)") 没有成功.任何提
什么是Rails 3的方式来排序.group()导致Activerecord(这里是“created_at”)?
@messages = Message.group(:foo) 只会显示最旧的消息.我需要最新的显示. 我试过了 @messages = Message.group(:foo).having("created_at = MAX(created_at)") 没有成功.任何提示赞赏! 澄清:我正在寻找组内订购,而不是一般的message.order(“…”). 更新:尝试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值 解决方法
在某些数据库下,您不能在同一个查询中使用order然后组,因此您需要使用两个查询:
message_ids = Message.select("MAX(id) AS id").group(:foo).collect(&:id) @messages = Message.order("created_at DESC").where(:id => message_ids) 注意:这假设您有一个自动递增的ID列,这是大多数Rails表所做的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |