多くのポイントを持っているユーザーがいて、ポイントはユーザーに属しています。
ポイントはいくらでも構いません。
user.total_points を簡単に実行できるように、ユーザーモデルに合計ポイントキャッシュを追加してデータベースに親切にしたい
これを実装するにはどうすればよいですか?
編集: PS 初めてポイントを追加するので、戻ってユーザーがすでに獲得したポイントを計算する必要はありません...今後必要になるだけです
多くのポイントを持っているユーザーがいて、ポイントはユーザーに属しています。
ポイントはいくらでも構いません。
user.total_points を簡単に実行できるように、ユーザーモデルに合計ポイントキャッシュを追加してデータベースに親切にしたい
これを実装するにはどうすればよいですか?
編集: PS 初めてポイントを追加するので、戻ってユーザーがすでに獲得したポイントを計算する必要はありません...今後必要になるだけです
テーブルcounter_cache
内の行が 1 つのポイントを構成する場合、この手法を使用できます。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