ruby-on-rails - 更多 ruby​​ 方法来计算符合条件的对象

标签 ruby-on-rails ruby activerecord

这是我现在正在做的:

def get_counts
  products = Product.all
  a_count, b_count, c_count = 0, 0, 0
  products.collect{ |p| a_count+=1 if p.some_attribute == 'a' }
  products.collect{ |p| b_count+=1 if p.some_attribute == 'b' }
  products.collect{ |p| c_count+=1 if p.some_attribute == 'c' }
  return a_count, b_count, c_count
end

这让我觉得脚本太可怕了。我尝试使用 inject 但无法让它按照我想要的方式工作。有没有人有更好的方法来做到这一点?

最佳答案

改进@xdazz 的回答

def get_counts
  Product.where(some_attribute: ['a','b','c']).
          count(group: "some_attribute")
end

这将返回以下形式的散列:

{'a' => 3, 'b' => 4, 'c' => 5}

关于ruby-on-rails - 更多 ruby​​ 方法来计算符合条件的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12516327/

相关文章:

ruby - 如何使用 XPath 和 Nokogiri 获取 XML 节点的内容

ruby-on-rails - Ruby/Rails 元编程 : generating helper methods on the fly

ruby - 连接到 Paypal 时出现 OpenSSL::SSL::SSLError (SSL_connect returned=1 errno=0 state=SSLv3 读取服务器证书 B:证书验证失败)

ruby-on-rails - Rails ActiveRecord 存储中的动态属性

sql - 使用 ActiveRecord 和 Rails 3 的复杂连接

ruby-on-rails - 有条件的单表继承

ruby-on-rails - 无法从 LDAP 向您授权,因为 "No such address or other socket error."

ruby-on-rails - 使用 Rails 的 asset pipeline 时如何获取实际文件路径(与 send_file 一起使用)

ruby-on-rails - 我应该将 gem 版本放在我的 Gemfile 中吗?

ruby-on-rails - 如何在不调用 Model.last.id 的情况下在 Rails 中获取下一个可用的唯一 ID?