【发布时间】:2019-05-08 01:26:07
【问题描述】:
我在名为user 的表中有一个名为active 的布尔列。
我正在尝试查找users,其中current_user 之前和之后的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
如果active 列值与之前和之后的user 不同,则上述应返回user。如果没有,它应该返回nil
是否有更容易或更好的做法来获得我想要的结果?
【问题讨论】:
-
你用的是什么数据库?
-
[self.id + 1, self.id - 1],id 可能并不总是遵循递增顺序。 -
“如果活动列的值对用户来说是唯一”是什么意思?
-
@SebastianPalma postgreSQL 在产品中。开发中的 SQLite3。并且“唯一”是一个错字,前后应该对用户“不同”。
-
@SebastianPalma 而不是 [self.id + 1, self.id - 1] 是否有类似 self.created_at.next 和 self.created_at.previous 的功能?
标签: ruby-on-rails ruby if-statement activerecord