迭代对象并以哈希结果获取结果

neo*_*ode -3 ruby ruby-on-rails

我的数据库中有一个用户表,每个用户的评级形式为1到5.我想找到每个评级的计数.我怎么能用对象做到这一点?

我有一个用户对象.

 [#<User id: 1,  email: "email1@email.com", rating: 1>,#<User id: 2,  email: "email2@email.com", rating: 3 >,#<User id: 3,  email: "email3@email.com", rating: 4 >,#<User id: 4,  email: "email4@email.com", rating: 3 >,#<User id: 5,  email: "email5@email.com", rating: 4 >,#<User id: 7,  email: "email7@email.com", rating: 2 >,#<User id: 8,  email: "email8@email.com", rating: 5 >,#<User id: 9,  email: "email9@email.com", rating: 5 >] 
Run Code Online (Sandbox Code Playgroud)

我想计算每个评级计数的计数; 评级1和评级5的计数只有1个.我想返回类似的内容:

 {'1' => 1 ,'2' => 1 ,'3'=>2,'4'=>2,'5'=>2}
Run Code Online (Sandbox Code Playgroud)

got*_*tva 5

试试这个

counts = User.group(:rating).count
Run Code Online (Sandbox Code Playgroud)

更新

如果没有评级,你想返回0,Ruby提供了很多方法.例如,我更喜欢默认Hash值http://apidock.com/ruby/v1_9_3_392/Hash/new/class

result = Hash.new(0) # 0 here is default value
result.merge!(counts)

result[2] # some value
result[-1] # => 0
Run Code Online (Sandbox Code Playgroud)