sql >> Databáze >  >> RDS >> PostgreSQL

Rails nepřevádí časové pásmo (PostgreSQL)

Vaše databáze ukládá vaše časová razítka v UTC (jak by měla). ActiveRecord provádí úpravy časového pásma, když ví, že má časové razítko; takže, když říkáte toto:

puts Activity.first.starting_at

AR ví, že starting_at je časové razítko, takže vytváří instanci časového razítka jako ActiveSupport::TimeWithZone instance a tato třída použije úpravu časového pásma. Ale když říkáte toto:

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

AR nebude analyzovat SQL, aby zjistil, že date_trunc vrátí časové razítko, AR ani neví, co date_trunc prostředek. AR pouze uvidí řetězec vycházející z databáze a předá vám jej bez interpretace. Tento řetězec můžete volně vložit do ActiveSupport::TimeWithZone (nebo vaše oblíbená hodina řízení času) sami:není nic špatného na tom, když AR řeknete věci, které sama o sobě neví a nemůže vědět.

Rails je chytrý, ale není to kouzlo.




  1. vytvořit tabulku se sekvencí.nextval v oracle

  2. MYSQL:jak změnit pořadí tabulky

  3. Kdy byste měli používat SQL Server s Access? (Tip:Téměř vždy)

  4. Konfigurační soubor hibernace (.cfg.xml) pro mapování více tabulek MySQL ve stejné databázi?