ruby-on-rails – ActiveRecord返回每个用户的最新记录(唯一)
发布时间:2020-12-17 02:23:27 所属栏目:百科 来源:网络整理
导读:我有一个用户模型和一个卡模型.用户有很多卡,因此卡具有属性user_id. 我想为每个用户获取最新的单卡.我已经能够做到这一点: Card.all.order(:user_id,:created_at)# = gives me all the Cards,sorted by user_id then by created_at 这让我走了一半,我当然
我有一个用户模型和一个卡模型.用户有很多卡,因此卡具有属性user_id.
我想为每个用户获取最新的单卡.我已经能够做到这一点: Card.all.order(:user_id,:created_at) # => gives me all the Cards,sorted by user_id then by created_at 这让我走了一半,我当然可以遍历这些行并抓住每个用户的第一行.但这对我来说真是太糟糕了,因为我在Ruby中使用Arrays做了很多这样的事情. 我也可以这样做: Card.select('user_id,max(created_at)').group('user_id') # => gives me user_id and created_at …但我只返回user_ids和created_at时间戳.我不能选择任何其他列(包括id),所以我得到的回报毫无价值.我也不明白为什么PG不让我选择比上面更多的列而不将它们放在group_by或聚合函数中. 我更愿意找到一种只使用ActiveRecord获得我想要的东西的方法.我也愿意在原始SQL中编写这个查询但是如果我不能用AR完成它.顺便说一句,我使用的是Postgres数据库,这限制了我的一些选择. 多谢你们. 解决方法
我们加入卡片表,ON
a)first.id!= second.id Card.joins("LEFT JOIN cards AS c ON cards.id != c.id AND c.user_id = cards.user_id AND cards.created_at < c.created_at").where('c.id IS NULL') (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |