rails返回平均评分大于5的用户列表

时间:2015-05-21 18:21:09

标签: sql ruby-on-rails ruby activerecord

我有2个型号的用户和评级如下:

class User < ActiveRecord::Base
  has_many :ratings
end

class Rating < ActiveRecord::Base
  belongs_to :user
end

每个用户从1到10收到多个评级。我想返回平均评分为&gt;的所有用户到目前为止,我已经得到了这个......

User.joins(:ratings).where('rating > ?', 5)

但该代码会返回任何评分大于5的用户。我希望用户的平均评分大于5。

我见过其他帖子,例如thisthat正在提出类似的问题,但我今天有一个脑筋,并且不能将他们的问题模拟成适当的答案。

3 个答案:

答案 0 :(得分:1)

如果您要查看所有用户,为什么要先加入?

@avg = Ratings.group(:user_id).average("rating") #returns hash which contains arrays
@avg.each do |avg|                               #0 is user_id, 1 is value
  puts avg[0] if avg[1] > 5
end

答案 1 :(得分:0)

您需要为用户评级定义方法平均值。

检查下面的链接这是将浮动移动到平均水平的好例子。

How do I create an average from a Ruby array?

答案 2 :(得分:0)

希望这可以帮助将来的某个人。这将通过评级表找到每个用户的平均评分,并返回平均评分高于5的所有用户。

User.joins(:ratings).merge(Rating.group(:user_id).having('AVG(rating) > 5'))

。我的遗失链接。有关herehere

的更多示例