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

好吧,您可以对 column 进行计数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 小时进行比较。

好吧,如果用户已经删除了这些记录,您应该创建另一个表并使用(only )Rate(date, hour, count)每小时记录一次。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 回答