sql >> Base de Datos >  >> RDS >> PostgreSQL

Rails no convierte la zona horaria (PostgreSQL)

Su base de datos está almacenando sus marcas de tiempo en UTC (como debería). ActiveRecord realiza ajustes de zona horaria cuando sabe que tiene una marca de tiempo; entonces, cuando dices esto:

puts Activity.first.starting_at

AR sabe que starting_at es una marca de tiempo, por lo que instancia la marca de tiempo como un ActiveSupport::TimeWithZone instancia y esa clase aplica el ajuste de zona horaria. Pero, cuando dices esto:

select("date_trunc('day', activities.starting_at) as date ...

AR no analizará el SQL para descubrir que date_trunc devolverá una marca de tiempo, AR ni siquiera sabe qué date_trunc medio. AR solo verá una cadena que sale de la base de datos y se la entregará sin interpretación. Puede enviar esa cadena a ActiveSupport::TimeWithZone (o su clase favorita de manejo del tiempo) usted mismo:no hay nada de malo en decirle cosas a AR que no sabe y no puede saber por sí mismo.

Rails es inteligente pero no es magia.