ActiveRecord by měl zachovat plnou přesnost z databáze, jen se na to nedíváte správně. Použijte strftime
a %N
formát pro zobrazení zlomků sekund. Například psql
říká toto:
=> select created_at from models where id = 1;
created_at
----------------------------
2012-02-07 07:36:20.949641
(1 row)
a ActiveRecord říká toto:
> Model.find(1).created_at.strftime('%Y-%m-%d %H:%M:%S.%N')
=> "2012-02-07 07:36:20.949641000"
Takže tam je všechno, jen musíte vědět, jak to vidět.
Pamatujte také, že ActiveRecord vám pravděpodobně poskytne ActiveSupport::TimeWithZone
objekty spíše než DateTime
objekty, ale DateTime
zachová také vše:
> '2012-12-31T01:01:01.232323+3'.to_datetime.strftime('%Y-%m-%d %H:%M:%S.%N')
=> "2012-12-31 01:01:01.232323000"
Podívejte se na connection_adapters/column.rb
ve zdroji ActiveRecord a zkontrolujte string_to_time
metoda dělá. Váš řetězec by klesl o fallback_string_to_time
cestu a to zachovává zlomkové sekundy tak blízko, jak mohu říct. Něco divného by se mohlo dít jinde, nebyl bych překvapený vzhledem k podivným věcem, které jsem viděl ve zdroji Rails, zejména databázové stránce věcí. Zkusil bych převést řetězce na objekty ručně, takže ActiveRecord od nich dá ruce pryč.