场景:我想获得与系统时间相关的最近时间。 我在我的模型中编写了以下方法:
def self.nearest_class(day, teacher_id, hour_min)
day_of_week = '%' + day + '%'
if hour_min == "06:00:00"
where('frequency like ? AND teacher_id = ? AND (start_time >= ?)', day_of_week, teacher_id, hour_min).order('start_time ASC')
else
where('frequency like ? AND teacher_id = ? AND (start_time >= localtime(0))', day_of_week, teacher_id).order('start_time ASC')
end
end
当我使用Lecture.nearest_class('Monday', 1, 'localtime(0)')
在rails控制台中测试上述方法时,会返回以下查询以及一些数据:
SELECT "lectures".* FROM "lectures" WHERE (frequency like '%Monday%' AND teacher_id = 1 AND (start_time >= localtime(0))) ORDER BY start_time ASC
但我期待没有记录,因为我的系统时间比数据库中记录的任何start_time都要大。我已经使用从控制台到pgadmin3的查询来测试结果是否相同。然而,正如预期的那样,pgadmin3没有显示任何结果。
postgresql时间和rails app时间有差异吗?我怎样才能检查这些差异?我在控制台中尝试了Time.now
,它与pgadmin3中的SELECT LOCALTIME(0)
相同。什么应该是获取最近系统时间记录的正确方法?
要进一步设置上下文,这是我的控制器方法:
def showlectures
@teacher = Teacher.login(params[:id]).first
@lecture_by_course = nil
if @teacher
WEEKDAY.each do |day|
hour_min = "06:00:00"
if day == Time.now.strftime("%A") # check if day of week is same e.g. 'Monday'
hour_min = "localtime(0)" # system time with format: HH:MM:SS
end
@lecture_by_course = Lecture.nearest_class(day, @teacher.id, hour_min).first
if @lecture_by_course
break
end
end
end
render json: @lecture_by_course, include: { course: { only: [:name, :id] }}
end
答案 0 :(得分:1)
我通过传递服务器Time.now而不是进行SQL检查来解决这个问题。 {:| d'oh}