0

我有很多积分的用户,积分属于用户。

点数可以是任意数量。

我想通过向我的用户模型添加总积分缓存来善待我的数据库,这样我就可以轻松地做 user.total_points

我该如何实施呢?

编辑:PS我是第一次加分,所以没有必要回去计算用户可能已经获得的积分......只需要它继续前进

4

1 回答 1

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
于 2012-04-12T23:30:18.887 回答