Ruby on rails 检查Rails中所有子对象中的布尔属性

Ruby on rails 检查Rails中所有子对象中的布尔属性,ruby-on-rails,ruby,activerecord,parent-child,has-many,Ruby On Rails,Ruby,Activerecord,Parent Child,Has Many,我有一个有多个参与者的会议模型。参与者有几个布尔属性:接受、拒绝等。我想检查会议的所有参与者是否都被接受==真。 是否有一种类似于sum方法(如total_price=items.sum(&:price))的快速方法来检查子对象的所有布尔属性 看看你可以使用的: 如果您的布尔列中没有空值需要担心: all_true = items.count(:conditions => [ 'bool_column = ?', false ]) == 0 或者,您可以这样做(如所建议的),以避开常见的

我有一个有多个参与者的会议模型。参与者有几个布尔属性:接受、拒绝等。我想检查会议的所有参与者是否都被接受==真。 是否有一种类似于sum方法(如total_price=items.sum(&:price))的快速方法来检查子对象的所有布尔属性

看看你可以使用的

如果您的布尔列中没有空值需要担心:

all_true = items.count(:conditions => [ 'bool_column = ?', false ]) == 0
或者,您可以这样做(如所建议的),以避开常见的空值问题,并避免重复计数:

all_true = items.count(:conditions => [ 'bool_column = ? or bool_column is null', false ]) == 0

您也可以同时检查多个布尔列。

如果只添加“bool\u column为null或bool\u column=?”,则第二个版本将使用null,false@klochner:好的,谢谢你指出这一点,我已经相应地修补了答案。请注意,此解决方案会将所有参与者加载到内存中,然后在其中循环,与下面mu的(更好)解决方案相反,它应该是log(n),这取决于情况。如果参与者已经加载了,我的解决方案不会因为额外的查询而困扰数据库,如果不是,mu的解决方案会更好。谢谢klockner。我没有意识到。@topek-这里没有争论,我假设他只是在使用会议模型,但是如果参与者被加载,你没有点击数据库是正确的
all_true = items.count(:conditions => [ 'bool_column = ?', false ]) == 0
all_true = items.count(:conditions => [ 'bool_column = ? or bool_column is null', false ]) == 0