사용자 모델에서 레코드를 검색하고 있습니다. from_date, to_date 검색 속성은 created_at 열을 기반으로 사용자 모델에서 검색된 레코드에 사용됩니다.Rails 일광 절약 시간제 검색 중
User model : (id, name, created_at)
데이터베이스에 다음 레코드가 있습니다. "2013년 9월 4일".to_date (FROM_DATE) 및 "2013년 9월 5일".to_date (TO_DATE) 사이
id, name, created_at
1 jd1 2013-09-04 18:01:57
2 jd2 2013-09-05 19:01:57
3 jd3 2013-09-05 23:01:57
난 검색하고, 첫 번째 두 개의 레코드가 반환된다. 마지막 하나는 반환되지 않습니다. to_date를 "2013-09-06"으로 변경하면 마지막 레코드가 표시됩니다. 이것은 제가 사용했던 쿼리입니다.
date_range = from_date ... to_date + 1.day
scope :by_date, ->(date_range) {where(created_at: date_range)}
User.by_date(date_range)
쿼리에 어떤 문제가 있습니까? 나는 거기에 일광 시간대 문제가 있다고 생각합니다. WHERE 절에
CAST(users.created_at AS DATE)
을 :
where("CAST(users.created_at AS DATE) BETWEEN ? AND ?", date1, date2)
를 귀하의 경우에는, 당신의 범위로 :
scope :by_date, lambda{ |date_range| where("CAST(users.created_at AS DATE) BETWEEN ? AND ?", date_range.min, date_range.max) }
희망이
, 그것은 실제로 날짜 시간입니다) – MrYoshiji
은 무엇입니까 실제 SQL이 생성되고 있습니까? 내 생각 엔 레일즈와 데이터베이스 사이의 시간대 변환을 실행하고 있다는 것입니다. –
@PhilipHallstrom 그것은 다음 sql을 생성합니다 : SELECT'users'. * FROM'users' WHERE ('users'.'created_at'> = '2013-09-04'AND'users'.created_at' < '2013-09 -06 ') – Kumar