ある機種の総レコード数の変化率を表示したい。そのため、いつでも、24 時間前に何人がいて、現在何人いるのかを知る必要があります。レコードがユーザーによって削除される可能性が非常に高いため、24 時間より古い既存のレコードの値をそのまま使用することはできません。
これを行う簡単な方法はありますか?
ありがとう
ある機種の総レコード数の変化率を表示したい。そのため、いつでも、24 時間前に何人がいて、現在何人いるのかを知る必要があります。レコードがユーザーによって削除される可能性が非常に高いため、24 時間より古い既存のレコードの値をそのまま使用することはできません。
これを行う簡単な方法はありますか?
ありがとう
class Item < ActiveRecord::Base
scope :since, lambda {|time| where("created_at > ?", time) }
scope :during_last, lambda {|time| where("created_at > ?", (Time.now - time)) }
end
Item.since(Time.now - 24.hours).count
Item.since(24.hours.ago).count
Item.during_last(24.hours).count
まあ、列に対してカウントを行うことができますcreated_at
。
def count_rate(model, time=DateTime.now)
current_count = model.count(:conditions => ["created_at < ?", time])
last_24_hours_count = model.count(:conditions => ["created_at < ?", time-24.hours])
current_count - last_24_hours_count
end
このメソッドは、過去 24 時間と比較して特定のレコードをカウントします。
ユーザーがそれらのレコードを削除した場合、別のテーブルを作成し、 (のみ)Rate(date, hour, count)
を使用して 1 時間ごとに記録する必要があります。observer
after_create
def after_create
rate = Rate.find_or_initialize_by(Date.today.to_s, Time.now.hour)
rate.increment(:count)
rate.save!
end
このオブザーバーでは、日付と時間で既存のレコードが見つかった場合、単純にカウント列をインクリメントします。列にもデフォルト値をゼロに追加しますcount
。後で、そのテーブルのデータを日付と時間でクエリできます。