作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要查询数据库并检索最后 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/
我是一名优秀的程序员,十分优秀!