약간 복잡한 시간 계산 문제가 있습니다. 사용자가 "이벤트 전에 얼마나 많은 x"시간을 설정할 수있는 미리 알림 시스템이 있습니다. 예 : '5 분'으로 설정하면 이벤트 일정 5 분 전에 미리 알림을 받아야합니다.ActiveRecord에 대한 동적 시간 기반 파인더
내 알리미 시스템에는 매분마다 실행되는 cron이있어 알림 메일을 보냅니다. 여태까지는 그런대로 잘됐다.
: 나는 누구의 예약 된 시간 "5.minutes.from_now 및 6.minutes.from_now"나는 다음과 같은 where 절을 작성하려합니다사이에 알림 (일정 항목을받을 수 있습니다 모든 캘린더 일정을 찾으려면 여기
conds = "'when' >= '#{eval("#{cal.remind_before.to_s}.#{cal.remind_before_what.downcase}.from_now").to_s(:db)}' AND 'when' < '#{eval("#{cal.remind_before.to_s}.#{cal.remind_before_what.downcase}.from_now + 1.minutes").to_s(:db)}'"
@mail_calendar_for_reminder= Calendar.find(:all, :conditions=> conds)
cal.reminder_before = '5'cal.remind_before_what.downcase = '분' 생성
때문에 평가는 (5.minutes.from_now) 및 (6.minutes.from_now)을 평가하는 것 SQL 문의 :
SELECT "calendars".* FROM "calendars" WHERE ('when' >= '2011-01-11 14:44:54' AND 'when' < '2011-01-11 14:45:54')
이 SQL은 구문 적으로 그리고 논리적으로 5 분 .from_now 및 6.minutes.from_now 시간 범위를 갖기 때문에 정확합니다. 그러나 적절한 기록을 선택하지는 않습니다. 나는 두 가지를 의심한다 : 1. 위의 SQL은 시간 비교가 아닌 문자열 비교를하고있다. 2. 달력의 예약 시간에 대한 데이터베이스 항목의 형식은
2011-01-11 14:45:09입니다. - 0은 날짜 비교를 망칠 수 있습니다.
거의 모든 종류의 날짜 범위 산술을 시도했지만이 쿼리에서 적합한 레코드를 가져올 수 없습니다.
SELECT "캘린더". * "캘린더"WHERE ('언제'> = CAST ('DATETIME 2011-01-11 16시 54분 49초 AS)'및 ''< 'CAST FROM (2011- 01-11 16:55:49 'AS DATETIME)) - 데이터베이스에서 모든 행을 반환합니다. "when"열은 모두 소문자입니다. – Ved
DDL 및 INSERT 문을 게시하여 문제를 보거나 재현 할 수 있습니까? –
https://gist.github.com/776061 - 캘린더 모델의 DDL을 업데이트하십시오. 미리 감사드립니다. – Ved