twinkle:
Por lo tanto, tengo una after_save gancho en opinión modelo que las llamadas calculate_specific_rating función del modelo del producto. La función es la siguiente:
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
En este momento, devuelve
specific_rating => {
"2"=> 3, "4"=> 1
}
Quiero que vuelva como:
specific_rating => {
"1"=> 0, "2"=>3, "3"=>0, "4"=>1, "5"=>0
}
Además, está bien para inicializar un nuevo cada vez hash de una revisión se guarda? Quiero alguna alternativa. Gracias
Sebastian Palma :
Se puede crear un rango de 1 hasta el valor máximo en ratings
más 1 y comenzar la iteración a través de ella, produciendo una matriz en donde el primer elemento es el actual, y el segundo elemento es el total de veces que el elemento actual está presente en ratings
. Después de todo, el resultado se convierte en un hash:
self.specific_rating = (1..ratings.max + 1).to_h { |e| [e.to_s, ratings.count(e)] }
save