ActiveRecord,在日期标准中按日期查找

时间:2012-05-26 07:25:54

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

我目前有一个带有匹配值和时间戳日期的普通日志。匹配值并不总是存在,因此第二个可能的选项是匹配时间戳。

?timestamp=20120426140449

此查询运行正常。

Subscription.find_by_created_at("20120426140449".to_date) 

但由于日志来自发布到我服务的第三方API,因此时间戳不一定在双方之间匹配。

我的问题是。如何尝试匹配确切的日期,如果没有尝试在给定的时间范围内寻找最接近的日期?

1 个答案:

答案 0 :(得分:1)

首先,我会使用to_datetimeto_time代替to_date,因为created_at是日期时间列,而不仅仅是日期。

class Subscription < ActiveRecord::Base
  scope :for_timestamp_with_delta, lambda { |timestamp, delta|
    datetime = timestamp.to_datetime
    delta    = delta.seconds
    where(:created_at => datetime-delta..datetime+delta)
  }
end

现在Subscription.for_timestamp_with_delta("20120426140449", 5)将返回在“星期四,2012年4月26日14:04:49”的±5秒内创建的所有订阅