Techioz Blog

Rails が where 句の前に時刻を UTC に変換するのを停止する - Rails 5.2

概要

私は、Location レコードと関連する OpenHour レコードを処理する Rail 5.2 アプリケーションを使用しています。オープニング時間モデルには、フィールド day (列挙型)、starts_at (時刻)、および ends_at (時刻) が含まれています。

以下を実行すると、Rails は、時間を OpenHour レコードの時間と比較する前に、Time.now をローカル タイムゾーン (+08:00) から UTC 時間に変換します。 start_at フィールドと opens_at フィールドはタイムゾーンなしの時刻として保存されるため、クエリで使用されるタイムゾーンは一致しません。

Location.opening_hours.where("start_at <= ? AND ends_at >= ?", Time.now, Time.now).any?

データベース内の時間がすでに現地時間であるため、比較する前に UTC 時間に変換しないように Rails に指示する最善の方法は何ですか?

助けていただければ幸いです。

解決策

application.rb でローカル タイムゾーンを config.time_zone = “My TimeZone” として構成すると、Time.zone.now を使用してローカル タイムゾーンの時刻に到達できます。

Location.opening_hours.where("start_at <= ? AND ends_at >= ?", Time.zone.now, Time.zone.now).any?