我有很多积分的用户,积分属于用户。
点数可以是任意数量。
我想通过向我的用户模型添加总积分缓存来善待我的数据库,这样我就可以轻松地做 user.total_points
我该如何实施呢?
编辑:PS我是第一次加分,所以没有必要回去计算用户可能已经获得的积分......只需要它继续前进
我有很多积分的用户,积分属于用户。
点数可以是任意数量。
我想通过向我的用户模型添加总积分缓存来善待我的数据库,这样我就可以轻松地做 user.total_points
我该如何实施呢?
编辑:PS我是第一次加分,所以没有必要回去计算用户可能已经获得的积分......只需要它继续前进
如果表中的行构成一个点,您可以使用该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