如何使用/通过ActiveRecord对一组记录进行布尔操作?



我有一个任务来确定记录子集的所有布尔属性是否都是true。在使用sum之后,我希望有一个类似的方法来处理布尔值。然而,我却找不到这样的东西。

我觉得通过简单的谷歌搜索,答案很有可能是非常清晰、直接的,但是我想不出正确的短语来搜索它。

我想要达到的目标:

[
#<User id: 1, name: "John", arborist: true>,
#<User id: 2, name: "Ben", arborist: true>,
#<User id: 3, name: "Betty", arborist: false>,
]

应该返回false

[
#<User id: 1, name: "John", arborist: true>,
#<User id: 2, name: "Ben", arborist: true>,
#<User id: 3, name: "Betty", arborist: true>,
]

应该返回true


目前我使用count.

all_arborists? = ( User.count == User.where(arborist: true).count )

它让我得到了结果,但我觉得还有更多的东西是我的大脑无法理解的。

您可以简单地检查数据库中是否存在单个非树艺师:

all_arborists = !User.exists?(arborist: false)

你可以把它定义为一个类方法,rails魔法会让它在所有作用域都可用:

class User
def self.all_arborists?
!exists?(arborist: false)
end
end
User.where(some_condition: foo).all_arborists?

如果您已经在内存中加载了记录,并且您正在使用数组,您可以使用Ruby的#all?方法:

all_arborists = records.all? { |r| r.arborist }

如果记录在DB中,并且你不想将它们加载到内存中,那么你需要一个SQL查询,并且你所尝试的是正确的路径:

non_arborists = User.where(some_condition: foo).where(arborist: false).count
all_arborists = non_arborists == 0

在User类上使用:pluck方法获取树目录列值,然后使用数组方法all?检查所有值是否为真。

User.pluck(:arborist).all?

相关内容

  • 没有找到相关文章

最新更新