gpt4 book ai didi

ruby-on-rails - ActiveRecord select with OR and exclusive limit

转载 作者:行者123 更新时间:2023-12-04 06:15:39 25 4
gpt4 key购买 nike

我需要查询数据库并检索最后 10 个活跃或拒绝的对象。我们使用以下内容:

User.where(status: [:active, :declined]).limit(10)

现在我们需要获取每个状态的最后 10 个(总共 20 个用户)

我试过以下方法:

User.where(status: :active).limit(10).or(User.where(status: : declined).limit(10))
# SELECT "users".* FROM "users" WHERE ("users"."status" = $1 OR "users"."status" = $2) LIMIT $3

这与之前的查询相同,仅返回 10 个用户,具有混合状态。

如何通过单个查询获取最近 10 个活跃用户和最近 10 个拒绝的用户?

最佳答案

我不确定 SQL 是否允许执行您想要的操作。我首先要尝试的是使用子查询,如下所示:

class User < ApplicationRecord
scope :active, -> { where status: :active }
scope :declined, -> { where status: :declined }
scope :last_active_or_declined, -> {
where(id: active.limit(10).pluck(:id))
.or(where(id: declined.limit(10).pluck(:id))
}
end

然后你可以在其他地方做

User.last_active_or_declined()

它的作用是执行 2 个不同的子查询,分别询问每个用户组,然后获取适当组 ID 中的子查询。我想说你甚至可以忘记 pluck(:id) 部分,因为 ActiveRecord 足够聪明,可以将适当的 select 子句添加到你的 SQL ,但我不是 100% 确定,而且我手头没有任何可以尝试此操作的 Rails 项目。

关于ruby-on-rails - ActiveRecord select with OR and exclusive limit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49695447/

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