如何对一组记录 using/via ActiveRecord 进行布尔运算?
How to do a boolean operation on a set of records using/via ActiveRecord?
我的任务是确定记录子集的所有布尔属性是否为 true
。在使用 sum
之后,我希望有一个类似的方法来处理布尔值。但是,我找不到这样的东西。
我觉得很有可能答案非常清楚、直接并且可以通过简单的 Google 搜索获得,但我想不出正确的短语来搜索它。
我正在努力实现的示例:
[
#<User id: 1, name: "John", arborist: true>,
#<User id: 2, name: "Ben", arborist: true>,
#<User id: 3, name: "Betty", arborist: false>,
]
应该returnfalse
[
#<User id: 1, name: "John", arborist: true>,
#<User id: 2, name: "Ben", arborist: true>,
#<User id: 3, name: "Betty", arborist: true>,
]
应该returntrue
目前我正在使用count
。
all_arborists? = ( User.count == User.where(arborist: true).count )
它让我得到了结果,但我觉得它的意义超出了我的想象。
如果您已经将记录加载到内存中,并且正在使用数组,则可以使用 Ruby 的 #all?
方法:
all_arborists = records.all? { |r| r.arborist }
如果记录在数据库中并且您不想将它们加载到内存中,那么您需要一个 SQL 查询,并且您尝试的是在正确的路径上:
non_arborists = User.where(some_condition: foo).where(arborist: false).count
all_arborists = non_arborists == 0
您可以简单地检查数据库中是否有一个 non-arborist:
all_arborists = !User.exists?(arborist: false)
您可以将其定义为 class 方法,rails 魔法将使它在所有范围内可用:
class User
def self.all_arborists?
!exists?(arborist: false)
end
end
User.where(some_condition: foo).all_arborists?
在用户 class 上使用 :pluck
方法获取树艺师列值,然后使用数组方法 all?
检查所有值是否为真。
User.pluck(:arborist).all?
我的任务是确定记录子集的所有布尔属性是否为 true
。在使用 sum
之后,我希望有一个类似的方法来处理布尔值。但是,我找不到这样的东西。
我觉得很有可能答案非常清楚、直接并且可以通过简单的 Google 搜索获得,但我想不出正确的短语来搜索它。
我正在努力实现的示例:
[
#<User id: 1, name: "John", arborist: true>,
#<User id: 2, name: "Ben", arborist: true>,
#<User id: 3, name: "Betty", arborist: false>,
]
应该returnfalse
[
#<User id: 1, name: "John", arborist: true>,
#<User id: 2, name: "Ben", arborist: true>,
#<User id: 3, name: "Betty", arborist: true>,
]
应该returntrue
目前我正在使用count
。
all_arborists? = ( User.count == User.where(arborist: true).count )
它让我得到了结果,但我觉得它的意义超出了我的想象。
如果您已经将记录加载到内存中,并且正在使用数组,则可以使用 Ruby 的 #all?
方法:
all_arborists = records.all? { |r| r.arborist }
如果记录在数据库中并且您不想将它们加载到内存中,那么您需要一个 SQL 查询,并且您尝试的是在正确的路径上:
non_arborists = User.where(some_condition: foo).where(arborist: false).count
all_arborists = non_arborists == 0
您可以简单地检查数据库中是否有一个 non-arborist:
all_arborists = !User.exists?(arborist: false)
您可以将其定义为 class 方法,rails 魔法将使它在所有范围内可用:
class User
def self.all_arborists?
!exists?(arborist: false)
end
end
User.where(some_condition: foo).all_arborists?
在用户 class 上使用 :pluck
方法获取树艺师列值,然后使用数组方法 all?
检查所有值是否为真。
User.pluck(:arborist).all?