我想在一些用户之前和之后查询n个用户。
为了清晰起见,修改
def local_query(id, range)
local_min = id - range*0.5
local_max = id + range*0.5
local_users = User.where(id: [local_min..local_max])
return local_users
end
答案 0 :(得分:1)
猜测你想通过限制ID(ID的特定范围)来查询用户,我认为以下应该可以正常工作
user_id_min_range = 5
user_id_max_range = 10
User.where(id: (user_id_min_range..user_id_max_range))
以上代码将返回ID介于6-10之间的用户
或者你也可以这样做
User.where("id > ?", 5).order(id: :asc).limit(5)
以上查询将选择ID大于5的用户,并按升序ID排序并返回前5位用户。
答案 1 :(得分:1)
如果我正确理解您的问题,您可以使用此范围:
scope :next_users, ->(start_id, user_limit) {
order(id: :asc).where("id > ?", start_id).limit(user_limit)
}
scope :before_users, ->(start_id, user_limit) {
order(id: :desc).where("id < ?", start_id).limit(user_limit)
}
他们将为预定义的用户ID选择下一个或之前的n个用户。