postgresql时间和rails 3 app时间的区别

时间:2013-02-11 02:02:29

标签: ruby-on-rails-3 postgresql

场景:我想获得与系统时间相关的最近时间。 我在我的模型中编写了以下方法:

  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

1 个答案:

答案 0 :(得分:1)

我通过传递服务器Time.now而不是进行SQL检查来解决这个问题。 {:| d'oh}