sql >> Database teknologi >  >> RDS >> PostgreSQL

Rails konverterer ikke tidszone (PostgreSQL)

Din database gemmer dine tidsstempler i UTC (som den skal). ActiveRecord laver tidszonejusteringer, når det ved, at det har et tidsstempel; så når du siger dette:

puts Activity.first.starting_at

AR ved, at starting_at er et tidsstempel, så det instansierer tidsstemplet som en ActiveSupport::TimeWithZone instans, og den klasse anvender tidszonejusteringen. Men når du siger dette:

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

AR vil ikke analysere SQL'en for at finde ud af den date_trunc returnerer et tidsstempel, AR ved ikke engang hvad date_trunc midler. AR vil bare se en streng komme ud af databasen, og den vil give dig den uden fortolkning. Du kan frit fodre denne streng til ActiveSupport::TimeWithZone (eller din foretrukne timehåndteringstime) dig selv:Der er intet galt i at fortælle AR ting, som den ikke ved og ikke kan vide af sig selv.

Rails er smart, men det er ikke magi.




  1. Sådan opretter du en MySQL-installation til lokal test

  2. Få Age fra DOB i MySQL

  3. Returner en værdi og et resultatsæt fra lagret procedure classic asp

  4. Hent den sidste (seneste) distinkte højeste værdi