与其他closeby对象相比,如何查找具有唯一列值的ActiveRecord对象

时间:2019-05-08 01:26:07

标签: ruby-on-rails ruby if-statement activerecord

我在名为active的表中有一个名为user的布尔列。

我正在尝试找到users之前和之后的usercurrent_user列中没有相同值的地方。

active

如果def has_unique_active_value user_ids_to_check = [self.id + 1, self.id - 1] # user.id before and after current_user if User.where(id: user_ids_to_check, active: self.active).present? return nil else return self end end current_user = User.all.first.has_unique_active_value 列的值与之前和之后的user不同,则上述内容应返回active。如果不是,则应返回user

为了获得我想要的结果,会使用一种更容易或更更好的方法吗?

1 个答案:

答案 0 :(得分:0)

递增/递减self.id可能不正确,因为该用户可能不再存在。最好找到下一个/上一个ID。通过选择小于self.id 的最大ID,可以找到上一个记录。同样,您可以通过选择最小ID大于self.id 来找到下一条记录

def has_unique_active_value
  user_ids_to_check = [User.where("id < ?", self.id).maximum(:id), User.where("id > ?", self.id).minimum(:id)]
  User.where(id: user_ids_to_check, active: self.active).present? ? nil : self
end

current_user = User.all.first.has_unique_active_value