如何计算具有特定属性值的数组中的项?

时间:2013-07-14 01:58:16

标签: ruby-on-rails ruby activerecord ruby-on-rails-4

在我的应用程序中,我有一个名为@apps的数组,由ActiveRecord加载一个包含应用程序名称,环境等的记录。

我目前正在使用@apps.count来获取数组中的应用数量,但我无法计算数组中environment = 0的应用数量。

我尝试了@apps.count(0),但由于每条记录都有多个字段,因此无效。

我也试过像@apps.count{ |environment| environment = 0}这样的东西但没有发生任何事情。

有什么建议吗?

3 个答案:

答案 0 :(得分:19)

只需使用select缩小到您想要的范围:

@apps.select {|a| a.environment == 0}.count

但是,如果这是基于ActiveRecord,你最好只是让你的初始查询限制它,除非你需要所有的记录,并且只是为了不同的目的以不同的方式过滤它们。

我假设您的模型是App,因为您将它们放入@apps

App.where(environment: 0).count

答案 1 :(得分:5)

你的变量错了。此外,您还有分配而不是比较。

 @apps.count{|app| app.environment == 0}

 @apps.count{|app| app.environment.zero?}

答案 2 :(得分:1)

我会在这里使用reduceeach_with_object

reduce docs

@apps.reduce(Hash.new(0)) do |counts, app| 
  counts[app.environment] += 1
  counts
end

each_with_object docs

@apps.each_with_object(Hash.new(0)) do |app, counts| 
  counts[app.environment] += 1
end

如果您能查询,请使用sql

App.group(:environment).count将返回一个哈希,其中键作为环境,值作为计数。