Rails - 如何检查24小时前模型的记录数

时间:2012-05-28 06:34:27

标签: ruby-on-rails ruby-on-rails-3 activerecord

我想显示某个型号的记录总数的变化率。所以我需要知道,在任何时候,24小时前有多少,现在有多少。 用户很可能会删除记录,因此我不能仅使用超过24小时的现有记录的值。

有一种简单的方法吗?

由于

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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),并使用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列上将默认值添加到零。稍后,您可以按日期和小时查询该表中的数据。