代码之家  ›  专栏  ›  技术社区  ›  Angelos Arampatzis

在rails下计算布尔值

  •  1
  • Angelos Arampatzis  · 技术社区  · 15 年前

    我在RoR应用程序中的两个模型之间有一个标准的主-细节关系。详细信息记录包含四个布尔字段,指示是否存在某些内容。

    当我显示细节记录时,我想添加一个摘要,指示四个布尔字段中每个字段的布尔值都设置为True的记录数。

    例如: 日期|布尔字段1 |布尔字段2 |等 2009/08/30 | T | F| 2009/08/31 | F | T| 2009/09/01 | F | T|

    我试着使用@entries.count([“Boolean Field 1”,true)]之类的东西 在我看来,有两种方法可以计算这些值:一种是在模型上执行SQL查询(丑陋),另一种是在视图级别使用计数器(丑陋)。还有其他方法可以实现我想要的吗?

    安杰洛斯阿兰帕齐斯

    3 回复  |  直到 15 年前
        1
  •  5
  •   dimus    15 年前

    可能是

    @entries.select {|r| r.bool_field1}.size 
    
        2
  •  4
  •   Zach Inglis    15 年前

    您可以执行以下任一操作:

    @entries.count(:conditions => { :boolean_field_1 => true })
    

    您可以通过执行命名范围来完成此操作:

    named_scope :booleans,  :conditions => { :boolean_field_1 => true })
    

    @entries.booleans.count
    

    或者,如果您已经拥有数组中的所有项(而不是一部分),并且不想访问数据库

    Rails提供了一个?方法,用于所有列。因此,尽管你有:

    @entry.boolean_field
    

    你还有:

    @entry.boolean_field?
    

    所以你可以这样做:

    @entries.collect(&:boolean_field?).length
    
        3
  •  1
  •   ErsatzRyan    15 年前

        4
  •  0
  •   cryptogopher    4 年前

    因为所有条目都是Rails对象,所以可以使用最短的形式:

    @entries.count(&:boolean_field1?)
    

    Enumerable#count