我对Rails很陌生,并想知道用户评级系统最适合的选项是什么:
user has_many reviews
每篇评论都包含评分。
为了显示评论计数和平均评分,最好将这些列添加到用户模型并通过评论模型上的after_save回调更新它们,或者只是定义将使用COUNT和AVERAGE但会命中的函数DB每次?
答案 0 :(得分:2)
最好添加列,特别是如果您对它们进行排序或在列表中显示它们。
同意@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