Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何使用activerecord和POSTGRES平均产品评论分数_Ruby On Rails_Ruby On Rails 3_Postgresql - Fatal编程技术网

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

Ruby on rails 如何使用activerecord和POSTGRES平均产品评论分数,ruby-on-rails,ruby-on-rails-3,postgresql,Ruby On Rails,Ruby On Rails 3,Postgresql,假设我有一个包含100个产品评论的表。每次评审都有一个“id”、“产品id”和“分数”。现在,我想做的是给出每个产品的平均分数。。。那么,有没有一种方法可以使用Rails来查询数据库呢?我肯定有,但我想不出来。我希望发生以下情况: Toyota Corolla 70% Toyota Camry 78% Toyota Avalon 80% 。。显然,基于对每一项的多个审查,这些审查是平均的,但以上述方式呈现 更新: 对于那些对解决方案感兴趣的人 这在控制器中: @ordered_hash = R

假设我有一个包含100个产品评论的表。每次评审都有一个“id”、“产品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\u hash[review.aidmodel\u id]
行提供了具有所需id的aidmodel的平均分数。

您可以混合并执行以下操作

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

您需要将查询更改为

MyClass.select('product_id').group('product_id').average('score')
看一看这张照片

更新:

尝试
MyClass。选择('DISTINCT(product_id'))。分组('product_id')。平均('score')


看这里

谢谢你,鲍德里克。对我来说只有一个问题。在Rails控制台中运行时,我得到一个错误:ActiveRecord::StatementInvalid:PG::error:error:column“reviews.created_at”必须出现在GROUP BY子句中或在聚合函数中使用。你知道是什么原因造成的吗?我只是在控制台中运行了以下命令(在我的例子中,aidmodel_id等同于product_id):Review.group('aidmodel_id')。average('score')我不知道为什么会出现这个错误。我在我的一个模型上进行了测试,它给了我以下SQL请求
Match.group('championship\u id')。average('date')
=>
(30.0ms)选择AVG(“matches”。“date”)作为average\u date,championship\u id作为championship\u id,从“matches”组中逐个championship\u id
啊,是的,这就是问题所在。博士后更严格一点。。。有一些帖子与Postgres的这个问题相关,但是查询和我的有点不同。。。所以我还是不明白。无论如何,谢谢你,我会投票支持你的答案,但我会等待一个与Postgres相关的答案(滴答声=)@Abram:这对PostgreSQL应该很好,你到底在尝试什么?另一方面,还有
Model.average(:x,:group=>:y)
。不幸的是,我看到了相同的错误:选择AVG(“reviews”。“score”)作为平均分数,aidmodel作为aidmodel作为aidmodel id,从“reviews”按aidmodel分组按aidmodel排序按reviews.created在DESC ActiveRecord::statement无效:PG::error:列“reviews.created\u at”必须出现在GROUP BY子句中或在聚合函数中使用您的代码确实有效。。。所以我决定投票表决,但鲍德里克已经和我合作了一段时间,他解决了我的问题。。这是我的审查模型中的默认范围。谢谢