PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Rails konvertiert keine Zeitzone (PostgreSQL)

Ihre Datenbank speichert Ihre Zeitstempel in UTC (so wie es sein sollte). ActiveRecord nimmt Zeitzonenanpassungen vor, wenn es weiß, dass es einen Zeitstempel hat; also, wenn du das sagst:

puts Activity.first.starting_at

AR weiß, dass starting_at ist ein Zeitstempel, also instanziiert er den Zeitstempel als ActiveSupport::TimeWithZone -Instanz und diese Klasse wendet die Zeitzonenanpassung an. Aber wenn Sie das sagen:

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

AR wird das SQL nicht parsen, um dieses date_trunc herauszufinden einen Zeitstempel zurückgeben, AR weiß nicht einmal, was date_trunc ist meint. AR sieht nur eine Zeichenfolge aus der Datenbank und gibt sie Ihnen ohne Interpretation weiter. Es steht Ihnen frei, diese Zeichenfolge an ActiveSupport::TimeWithZone weiterzugeben (oder Ihre Lieblings-Zeitmanagement-Klasse) selbst:Es ist nichts falsch daran, AR Dinge zu sagen, die es selbst nicht weiß und nicht wissen kann.

Rails ist schlau, aber keine Zauberei.