更多ruby方式来计算符合条件的对象

时间:2012-09-20 15:52:03

标签: 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

这给我带来了可怕的脚本。我尝试使用注入,但无法让它按我想要的方式工作。有没有人有更好的方法来做到这一点?

2 个答案:

答案 0 :(得分:2)

改进@ xdazz的答案

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

这将返回以下形式的哈希:

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

答案 1 :(得分:1)

def get_counts
  return Product.where(:some_attribute => 'a').count, Product.where(:some_attribute => 'b').count, Product.where(:some_attribute => 'c').count
end

如果您只想要一个查询,请使用group by。