PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Rails não converte fuso horário (PostgreSQL)


Seu banco de dados está armazenando seus timestamps em UTC (como deveria). ActiveRecord está fazendo ajustes de fuso horário quando sabe que tem um timestamp; então, quando você diz isso:
puts Activity.first.starting_at

AR sabe que starting_at é um carimbo de data/hora, portanto, instancia o carimbo de data/hora como um ActiveSupport::TimeWithZone instância e essa classe aplica o ajuste de fuso horário. Mas, quando você diz isso:
select("date_trunc('day', activities.starting_at) as date ...

AR não vai analisar o SQL para descobrir que date_trunc retornará um timestamp, AR nem sabe o que date_trunc significa. AR apenas verá uma string saindo do banco de dados e a entregará a você sem interpretação. Você está livre para alimentar essa string para ActiveSupport::TimeWithZone (ou sua aula favorita de gerenciamento de tempo) você mesmo:não há nada de errado em dizer coisas de RA que ele não sabe e não pode saber por conta própria.

Rails é inteligente, mas não é mágico.