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