加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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
b)first.user_id = second.user_id
c)first.created_at< second.created_at

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')

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读