0

我想使用以下公式根据他们的分数(0-100)和投票数来计算我的每个产品的贝叶斯分数:

( (avg_num_votes * avg_rating) + (this_num_votes * this_rating) ) / (avg_num_votes + this_num_votes)

每个产品都有_many评论,每条评论都有一个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

但是,以最有效的方式完成,可能通过控制器中的连接?

4

1 回答 1

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
于 2012-08-05T01:01:58.063 回答