Rails 4 评级内部模型

Rails 4 Rating Inside Model

我对 Rails 很陌生,想知道哪种选项最适合用户评级系统:

user has_many reviews

每条评论都包含一个评分。

为了显示评论数和平均评分,将这些列添加到用户模型并通过评论模型上的 after_save 回调或简单地定义将使用 COUNT 的函数来更新它们是否更好?和平均水平,但每次都会达到数据库?

添加列当然更好,尤其是在对它们进行排序或在列表中显示它们时。

同意@Halogen

的列定义

我倾向于将这些放在 after_save 的方法中,以确保首先有效地保存所有对象。

after_save :set_reviews_average, set_reviews_count

# Note: update_column won't trigger callbacks

def set_reviews_average
  update_column(:reviews_average, reviews.average(:rating)) 
end

def set_reviews_count
  update_column(:reviews_count, reviews.count) 
end