Ruby on Railsは、特定の評価カウントハッシュを計算する方法は?

きらめき:

だから、私は持っている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

今、それを返します

specific_rating => { 
"2"=> 3, "4"=> 1
}

私はそれがのように返すようにしたいです:

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

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=369387&siteId=1