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

bun*_*ufi 1 ruby activerecord ruby-on-rails

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

我觉得答案很可能非常清晰、直接,并且可以通过简单的谷歌搜索获得,但我无法想出正确的短语来搜索它。

我想要实现的目标的示例:

[
  #<User id: 1, name: "John", arborist: true>,
  #<User id: 2, name: "Ben", arborist: true>,
  #<User id: 3, name: "Betty", arborist: false>,
]
Run Code Online (Sandbox Code Playgroud)

应该返回false

[
  #<User id: 1, name: "John", arborist: true>,
  #<User id: 2, name: "Ben", arborist: true>,
  #<User id: 3, name: "Betty", arborist: true>,
]
Run Code Online (Sandbox Code Playgroud)

应该返回true


目前我正在使用count.

all_arborists? = ( User.count == User.where(arborist: true).count )
Run Code Online (Sandbox Code Playgroud)

它给了我结果,但我觉得其中的内容超出了我的头脑所能理解的范围。

Bro*_*tse 5

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

all_arborists = !User.exists?(arborist: false)
Run Code Online (Sandbox Code Playgroud)

您可以将其定义为类方法,rails magic 将使其在所有范围内可用:

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

User.where(some_condition: foo).all_arborists?
Run Code Online (Sandbox Code Playgroud)