2017-10-19 30 views
0

Il est actuellement 12h33 à San Francisco.Time.use_zone est ignoré pendant la requête d'enregistrement active

irb(main):027:0> Time.use_zone("Pacific Time (US & Canada)") { puts Time.zone.now } 2017-10-19 12:33:06 -0700

Time.use_zone("Pacific Time (US & Canada)") { Event.where("starts_at >= ?", Time.zone.now) } Event Load (1.4ms) SELECT "events".* FROM "events" WHERE (starts_at >= '2017-10-19 19:33:22.532660')

A en juger par les documents et previous SO threads, cela semble être l'utilisation correcte. Qu'est-ce que je rate?

UPDATE:

Ajout to_s à la requête de AR utilisé le fuseau horaire.

Répondre

1

En ce qui concerne cette requête spécifique, vous ne devriez pas être trop inquiet. La requête SELECT a converti votre Time.zone.now en UTC, tout comme tout le reste de votre base de données. Cela se produit parce que Rails convertit toutes les dates à stocker (et à rechercher) dans la base de données par défaut à UTC. Quand il est 12h33, il est 19h33 UTC.

+0

Si vous souhaitez stocker l'heure locale dans la base de données, vous pouvez ajouter 'config.active_record.default_timezone =: local' dans la configuration de votre application. –