Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何查找与其他closeby对象相比具有唯一列值的ActiveRecord对象_Ruby On Rails_Ruby_If Statement_Activerecord - Fatal编程技术网

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

Ruby on rails 如何查找与其他closeby对象相比具有唯一列值的ActiveRecord对象,ruby-on-rails,ruby,if-statement,activerecord,Ruby On Rails,Ruby,If Statement,Activerecord,我在一个名为user的表中有一个名为active的布尔列 我正在尝试查找当前用户之前和之后的用户在active列中的值不相同的用户 def具有唯一的活动值 user_id_to_check=[self.id+1,self.id-1]当前_用户之前和之后的user.id 如果User.whereid:User\u id\u to\u检查,活动:self.active.present? 归零 其他的 回归自我 终止 终止 当前用户=user.all.first.has_unique_active_值

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

我正在尝试查找当前用户之前和之后的用户在active列中的值不相同的用户

def具有唯一的活动值 user_id_to_check=[self.id+1,self.id-1]当前_用户之前和之后的user.id 如果User.whereid:User\u id\u to\u检查,活动:self.active.present? 归零 其他的 回归自我 终止 终止 当前用户=user.all.first.has_unique_active_值 如果活动列的值与之前和之后的用户不同,则上面应该返回一个用户。如果不是,则应返回零


为了得到我想要的结果,是否有更简单或更好的方法可以使用?

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


您使用的是什么数据库?[self.id+1,self.id-1],ids可能并不总是按照递增顺序。如果活动列值对用户来说是唯一的,这是什么意思?@SebastianPalma postgreSQL在Dev.prod.SQLite3中,unique是一个输入错误,应该与用户之前和之后不同。@SebastianPalma而不是[self.id+1,self.id-1]有没有像self.created_at.next和self.created_at.previous这样的函数?当你只能做一个查询时,就做三个查询,真是太棒了。谢谢,像你在删除的答案中那样编写特定于数据库的查询也是如此。如果你能想出更好的解决方案,请随时发布或帮助我改进我的答案。你的讽刺对这里的任何人都没有帮助。User.exists?['id=IFNULLSELECT MINid FROM users WHERE id>:id,0或id=IFNULLSELECT MAXid FROM users WHERE id<:id,0 AND active=:active',id:id,active:active],仅此而已。
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