Rails:在某个ID之前和之后查询n个ID

时间:2015-04-08 04:36:05

标签: sql ruby-on-rails ruby activerecord

我想在一些用户之前和之后查询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

2 个答案:

答案 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个用户。