1

ある機種の総レコード数の変化率を表示したい。そのため、いつでも、24 時間前に何人がいて、現在何人いるのかを知る必要があります。レコードがユーザーによって削除される可能性が非常に高いため、24 時間より古い既存のレコードの値をそのまま使用することはできません。

これを行う簡単な方法はありますか?

ありがとう

4

2 に答える 2

2
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
于 2012-05-28T08:22:16.090 に答える
1

まあ、列に対してカウントを行うことができます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 時間ごとに記録する必要があります。observerafter_create

def after_create
  rate = Rate.find_or_initialize_by(Date.today.to_s, Time.now.hour)
  rate.increment(:count)
  rate.save!
end

このオブザーバーでは、日付と時間で既存のレコードが見つかった場合、単純にカウント列をインクリメントします。列にもデフォルト値をゼロに追加しますcount。後で、そのテーブルのデータを日付と時間でクエリできます。

于 2012-05-28T06:54:48.093 に答える