Ruby on Rails activerecord信誉系统的平均评级和评级总数

时间:2014-06-20 22:50:51

标签: ruby-on-rails activerecord

我正在使用activerecord_reputation_system gem对某些内容进行评分,让我们称之为模型X.在app / models / x.rb中我有

has_reputation :rating, source: :user, aggregated_by: :average

这让我可以查看平均评分。

我的问题:如何查看X型的平均评分和总票数?一种方法是添加到app / models / x.rb:

has_reputation :rating, source: :user, aggregated_by: :average
has_reputation :reviews, source: :user, aggregated_by: :sum

并且在控制器中有:

value = params[:rating]
@x = X.find(params[:id])
if X.where(id: params[:id]).evaluated_by(:reviews, current_user).blank?
  @x.add_or_update_evluation(:reviews, 1, current_user)
end
@x.add_or_update_evaluation(:rating, value, current_user)

这是最好的方法吗?还是有更好的方法?

非常感谢。

1 个答案:

答案 0 :(得分:2)

我认为你可以这样做:

class Vote < ActiveRecord::Base
 belongs_to :x
 attr_accessible :rate #it can be in range 1..5

 def rating
  rate
 end
end    

 class X < ActiveRecord::Base
 has_many :votes

 def average_rating
   unless votes.empty?
    (self.votes.sum(&:rating)/number_of_votes.to_f).round
   end
 end

 def number_of_votes
  self.votes.count
 end
end

您也可以使用gem:https://github.com/muratguzel/letsrate

如果这是一个很好的解决方案,请告诉我。