在我的应用程序中,我有一个名为@apps
的数组,由ActiveRecord加载一个包含应用程序名称,环境等的记录。
我目前正在使用@apps.count
来获取数组中的应用数量,但我无法计算数组中environment = 0
的应用数量。
我尝试了@apps.count(0)
,但由于每条记录都有多个字段,因此无效。
我也试过像@apps.count{ |environment| environment = 0}
这样的东西但没有发生任何事情。
有什么建议吗?
答案 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)
我会在这里使用reduce
或each_with_object
:
@apps.reduce(Hash.new(0)) do |counts, app|
counts[app.environment] += 1
counts
end
@apps.each_with_object(Hash.new(0)) do |app, counts|
counts[app.environment] += 1
end
如果您能查询,请使用sql
App.group(:environment).count
将返回一个哈希,其中键作为环境,值作为计数。