我的用户有很多点和点属于用户。
积分可以是任何金额。
我希望通过向我的用户模型添加总点缓存来对我的数据库表示友好,这样我就可以轻松地执行user.total_points
我该如何实施呢?
编辑:PS我是第一次添加积分,所以没有必要回去计算用户可能已经获得的积分......只需要它继续前进答案 0 :(得分:1)
如果counter_cache
表中的行构成一个点,则可以使用points
技术。否则,您可以使用简单的after_save
过滤器实现它。
class User
# add a column called total_points and set the default to 0
has_many :points
end
class Point
# assuming `amount` column stores the points.
belongs_to :user
after_create { |p| p.update_user_points(:create) }
after_update { |p| p.update_user_points(:update) if p.amount_changed? }
after_destroy{ |p| p.update_user_points(:destroy)}
def update_user_points(type)
delta = (type == :create) ? amount :
(type == :update) ? (amount - amount_was) :
-amount
User.update_counters(user, :total_points => delta)
end
end