我正在使用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)
这是最好的方法吗?还是有更好的方法?
非常感谢。
答案 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
如果这是一个很好的解决方案,请告诉我。