如何计算 rails 上 ruby 中的特定评分计数哈希值?
How to calculate specific rating count hash in ruby on rails?
所以,我有一个 after_save 挂钩 review 模型,它调用 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
现在,returns
specific_rating => {
"2"=> 3, "4"=> 1
}
我希望它 return 像:
specific_rating => {
"1"=> 0, "2"=>3, "3"=>0, "4"=>1, "5"=>0
}
此外,每次保存评论时都可以初始化一个新的哈希值吗?我想要一些替代品。谢谢
您可以创建一个从 1 到 ratings
中的最大值加 1 的范围,然后开始遍历它,生成一个数组,其中第一个元素是当前元素,第二个元素是当前元素出现在 ratings
中的次数。完成所有操作后,结果将转换为散列:
self.specific_rating = (1..ratings.max + 1).to_h { |e| [e.to_s, ratings.count(e)] }
save
你也可以这样做 -
def calculate_specific_rating
ratings = [1,2,3,4,5]
existing_ratings = reviews.group_by(&:rating).map{|k,v| [k, v.count]}.to_h
Hash[(ratings - existing_ratings.keys).map {|x| [x, 0]}].merge(existing_ratings)
end
这给出
{3=>0, 4=>0, 5=>0, 2=>3, 1=>1}
所以,我有一个 after_save 挂钩 review 模型,它调用 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
现在,returns
specific_rating => {
"2"=> 3, "4"=> 1
}
我希望它 return 像:
specific_rating => {
"1"=> 0, "2"=>3, "3"=>0, "4"=>1, "5"=>0
}
此外,每次保存评论时都可以初始化一个新的哈希值吗?我想要一些替代品。谢谢
您可以创建一个从 1 到 ratings
中的最大值加 1 的范围,然后开始遍历它,生成一个数组,其中第一个元素是当前元素,第二个元素是当前元素出现在 ratings
中的次数。完成所有操作后,结果将转换为散列:
self.specific_rating = (1..ratings.max + 1).to_h { |e| [e.to_s, ratings.count(e)] }
save
你也可以这样做 -
def calculate_specific_rating
ratings = [1,2,3,4,5]
existing_ratings = reviews.group_by(&:rating).map{|k,v| [k, v.count]}.to_h
Hash[(ratings - existing_ratings.keys).map {|x| [x, 0]}].merge(existing_ratings)
end
这给出
{3=>0, 4=>0, 5=>0, 2=>3, 1=>1}