2012-05-26 6 views
0

현재 일치하는 값과 타임 스탬프 날짜가있는 일반 로그가 있습니다. 일치하는 값이 항상 존재하지는 않으므로 두 번째 가능한 옵션은 타임 스탬프를 통해 일치시키는 것입니다.ActiveRecord, 날짜 기준 날짜 찾기

?timestamp=20120426140449 

이 쿼리는 정상적으로 실행됩니다. 이 로그는 내 서비스에 게시 타사 API에서입니다 이후

Subscription.find_by_created_at("20120426140449".to_date) 

그러나, 타임 스탬프는 반드시 양측 사이에 일치하지 않습니다.

내 질문입니다. 정확한 날짜와 일치하는 것을 시도하는 것이 가능한지 그리고 주어진 시간 범위에서 가장 가까운 것을 찾지 않으려한다면 어떻게합니까?

답변

1

우선 created_at은 날짜가 아닌 날짜/시간 열이므로 to_date 대신 to_datetime 또는 to_time을 사용합니다.

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)가의 ± 5 초 내에 생성 된 모든 구독을 반환합니다 "2012년 4월 26일 (목) 14시 4분 49초"