gpt4 book ai didi

ruby-on-rails - ActiveRecord 返回每个用户的最新记录(唯一)

转载 作者:数据小太阳 更新时间:2023-10-29 07:35:55 40 4
gpt4 key购买 nike

我有一个用户模型和一个卡片模型。用户有很多张卡片,所以卡片有一个属性user_id

我想为每个用户获取最新的单张卡片。我已经能够做到这一点:

Card.all.order(:user_id, :created_at)
# => gives me all the Cards, sorted by user_id then by created_at

这让我完成了一半,我当然可以遍历这些行并为每个用户获取第一行。但这对我来说真的很难闻,因为我会在 Ruby 中使用数组来做很多这样的事情。

我也可以这样做:

Card.select('user_id, max(created_at)').group('user_id')
# => gives me user_id and created_at

...但我只取回 user_ids 和 created_at 时间戳。我无法选择任何其他列(包括 id),所以我得到的结果毫无值(value)。我也不明白为什么 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')

关于ruby-on-rails - ActiveRecord 返回每个用户的最新记录(唯一),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26765633/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com