首先,我知道这对你们大多数人来说都是基本的东西,但我还在学习,我将不胜感激。
我的子表中有一个布尔列。我试图查询与父项关联的所有子记录,以查看布尔列的值是否对所有这些子记录都为真。
我现在拥有的是:
if Parent.children.count(:conditions => [ 'boolean_column = ?', true ]) == Parent.children.count
return true
我的逻辑是,如果所有相关子记录的计数等于布尔列为真的相关子记录的计数,那么它应该返回true,但当然它不起作用。
如果有的话,有什么轨道方式?
答案 0 :(得分:0)
你可以这样做
Parent.children.where("boolean_column = ?", true).count == Parent.children.count
答案 1 :(得分:0)
您只需执行1次查询即可实现此目的。但要做到这一点,您需要首先确保布尔列不应该NULL
,true
或false
除外。因此,添加 NOT NULL 约束将确保该列永远不会为NULL。之后,您可以运行以下查询:
hash = Children.
group(:boolean_column).
where(parent_id: 12).
count(:boolean_column)
12
应替换为您父亲的实际ID。现在,请检查hash
是否将false
作为关键字,例如hash.has_key?(false)
。如果没有false
键,则可以断言所有子节点都有true
到布尔列。