我在名为active
的表中有一个名为user
的布尔列。
我正在尝试找到users
之前和之后的user
在current_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
为了获得我想要的结果,会使用一种更容易或更更好的方法吗?
答案 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