我想根据他们的得分(0-100)和投票数使用以下公式计算每件产品的贝叶斯分数:
((avg_num_votes * avg_rating)+(this_num_votes * this_rating))/ (avg_num_votes + this_num_votes)
每个产品都有很多评论,每个评论的评分为0-100。
从数据库中提取产品列表时,计算视图中表格中列出的贝叶斯分数的最佳方法是什么?
编辑:我正在寻找以下内容:
Product.each do |product|
@product_bayesian = ((Review.count * Review.average(:score)) + (product.reviews.count + product.reviews.average(:score))/(Review.count+product.reviews.count)
end
但是,尽可能以最有效的方式完成,可能通过控制器中的连接?
答案 0 :(得分:0)
这是我的解决方案:
def overall
@products = Product.all
@overall_count = Review.count
@overall_average = Review.average(:score)
@unranked = {}
@products.each do |product|
@review_score_raw = product.reviews.average(:score)
@review_score = @review_score_raw.to_int if @review_score_raw
@review_count = product.reviews.count
if product.reviews.count == 0
@bayesian = 0
else
@bayesian = (((@overall_count * @overall_average) + (@review_count * @review_score_raw))/(@overall_count + @review_count))
end
@unranked[product] = @bayesian
end
@ranked = @unranked.sort_by {|key, value| value}.reverse.each_with_index.to_a
end