如何查询子模型中的所有记录是否具有相同的属性值?

时间:2016-08-02 19:45:58

标签: ruby-on-rails

首先,我知道这对你们大多数人来说都是基本的东西,但我还在学习,我将不胜感激。

我的子表中有一个布尔列。我试图查询与父项关联的所有子记录,以查看布尔列的值是否对所有这些子记录都为真。

我现在拥有的是:

  if Parent.children.count(:conditions => [ 'boolean_column = ?', true ]) == Parent.children.count
    return true

我的逻辑是,如果所有相关子记录的计数等于布尔列为真的相关子记录的计数,那么它应该返回true,但当然它不起作用。

如果有的话,有什么轨道方式?

2 个答案:

答案 0 :(得分:0)

你可以这样做

Parent.children.where("boolean_column = ?", true).count == Parent.children.count

答案 1 :(得分:0)

您只需执行1次查询即可实现此目的。但要做到这一点,您需要首先确保布尔列不应该NULLtruefalse除外。因此,添加 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到布尔列。