如何使用activerecord和POSTGRES平均产品评论分数

时间:2012-03-17 21:31:57

标签: ruby-on-rails ruby-on-rails-3 postgresql

假设我有一张包含100个产品评论的表格。每个评论都有一个“id”,“product_id”和“得分”。现在,我想要做的是提供每个产品的平均分数......那么有没有办法使用Rails来查询数据库呢?我肯定必须有,但我无法弄清楚。我希望发生以下情况:

Toyota Corolla 70%
Toyota Camry 78%
Toyota Avalon 80%

..显然基于对每个平均值的多个评论,但以上述方式呈现。

更新:

对那些对解决方案感兴趣的人

这是在控制器中:

@ordered_hash = Review.group('aidmodel_id').average('score')
@keys = @ordered_hash.keys
@reviews = Review.where(:aidmodel_id=>@keys).uniq_by {|x| x.aidmodel_id}

这是在视图中:

<% @reviews.each do |review| %>

    <%= review.aidmodel.id %>
    <%= @ordered_hash[review.aidmodel_id] %>

  <% end %>

@ordered_hash[review.aidmodel_id]行提供具有所需ID的援助模型的平均分数。

2 个答案:

答案 0 :(得分:6)

您可以混合averagegroup来执行类似

的操作
MyClass.group('product_id').average('score')
# => {product_id1 => average1, product_id2 => average2, ... }

答案 1 :(得分:1)

您需要将查询更改为

MyClass.select('product_id').group('product_id').average('score')

查看question

更新

尝试MyClass.select('DISTINCT(product_id)').group('product_id').average('score')

看这里group by in postgres