ActiveRecord bør bevare den fulde præcision fra databasen, du ser bare ikke ordentligt på den. Brug strftime
og %N
formater for at se brøkdelen af sekunder. For eksempel psql
siger dette:
=> select created_at from models where id = 1;
created_at
----------------------------
2012-02-07 07:36:20.949641
(1 row)
og ActiveRecord siger dette:
> Model.find(1).created_at.strftime('%Y-%m-%d %H:%M:%S.%N')
=> "2012-02-07 07:36:20.949641000"
Så alt er der, du skal bare vide, hvordan du ser det.
Bemærk også, at ActiveRecord sandsynligvis vil give dig ActiveSupport::TimeWithZone
objekter i stedet for DateTime
objekter, men DateTime
bevarer alt også:
> '2012-12-31T01:01:01.232323+3'.to_datetime.strftime('%Y-%m-%d %H:%M:%S.%N')
=> "2012-12-31 01:01:01.232323000"
Tag et kig på connection_adapters/column.rb
i ActiveRecord-kilden og tjek hvad string_to_time
er metode gør. Din streng ville gå ned ad fallback_string_to_time
sti, og det bevarer brøkdele af sekunder så tæt på, som jeg kan se. Noget mærkeligt kunne foregå andre steder, jeg ville ikke blive overrasket i betragtning af de mærkelige ting, jeg har set i Rails-kilden, især databasesiden af tingene. Jeg ville prøve at konvertere strengene til objekter i hånden, så ActiveRecord holder hænderne væk fra dem.