如何在 ruby​​ on rails 中计算特定的评级计数哈希?

ros*_*ita 7 ruby hash ruby-on-rails after-save

所以,我在评论模型上有一个after_save钩子,它调用了产品模型的calculate_specific_rating函数。函数是这样的:

def calculate_specific_rating
    ratings = reviews.reload.all.pluck(:rating)
    specific_rating = Hash.new(0)
    ratings.each { |rating| specific_rating[rating] += 1 }
    self.specific_rating = specific_rating
    save
  end
Run Code Online (Sandbox Code Playgroud)

现在,它返回

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

我希望它返回如下:

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

另外,每次保存评论时都可以初始化一个新的哈希吗?我想要一些替代品。谢谢

Seb*_*lma 6

您可以创建从 1 到ratingsplus 1 中的最大值的范围,然后开始遍历它,生成一个数组,其中第一个元素是当前元素,第二个元素是当前元素在 中出现的总次数ratings。在一切之后,结果被转换为散列:

self.specific_rating = (1..ratings.max + 1).to_h { |e| [e.to_s, ratings.count(e)] }
save
Run Code Online (Sandbox Code Playgroud)