0

シナリオ: システム時刻に関連する最も近い時刻を取得したいと考えています。モデル内に次のメソッドを記述しました。

  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

を使用して Rails コンソールで上記の方法をテストしたところLecture.nearest_class('Monday', 1, 'localtime(0)')、次のクエリがいくつかのデータと共に返されました。

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 時間に違いはありますか? これらの違いを確認するにはどうすればよいですか? コンソールで試してみましたが、 pgadmin3Time.nowと同じです。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
4

1 に答える 1

1

SQLチェックの代わりにサーバーTime.nowを渡すだけでこれを解決しました。{ :| ドー}

于 2013-02-25T14:32:30.663 に答える