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

ny9*_*y95 8 ruby activerecord ruby-on-rails ruby-on-rails-4

在我的应用程序中,我有一个名为@appsActiveRecord 的数组,其中包含一个包含应用程序名称,环境等的记录.

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

我尝试@apps.count(0)但是没有用,因为每条记录都有多个字段.

我也尝试了类似@apps.count{ |environment| environment = 0}但没有发生的事情.

有什么建议?

Ale*_*hey 21

只是select用来缩小到你想要的范围:

@apps.select {|a| a.environment == 0}.count
Run Code Online (Sandbox Code Playgroud)

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

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

App.where(environment: 0).count
Run Code Online (Sandbox Code Playgroud)

  • 根据记录的数量,可以更快地要求DBM计算记录,然后一次迭代一条记录,而不是要求所有记录,然后在Ruby中对它们进行计数和迭代.DBM针对处理`count`然后逐行迭代进行了优化.立即转储整个表将打败您的数据库,数据库主机,网络,运行代码的主机以及您的Rails服务器和应用程序. (4认同)

saw*_*awa 5

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

 @apps.count{|app| app.environment == 0}
Run Code Online (Sandbox Code Playgroud)

要么

 @apps.count{|app| app.environment.zero?}
Run Code Online (Sandbox Code Playgroud)