ActiveRecord zou de volledige precisie van de database moeten behouden, je kijkt er gewoon niet goed naar. Gebruik strftime
en de %N
formaat om de fractionele seconden te zien. Bijvoorbeeld psql
zegt dit:
=> select created_at from models where id = 1;
created_at
----------------------------
2012-02-07 07:36:20.949641
(1 row)
en ActiveRecord zegt dit:
> Model.find(1).created_at.strftime('%Y-%m-%d %H:%M:%S.%N')
=> "2012-02-07 07:36:20.949641000"
Dus alles is er, je moet alleen weten hoe je het kunt zien.
Houd er ook rekening mee dat ActiveRecord u waarschijnlijk ActiveSupport::TimeWithZone
. zal geven objecten in plaats van DateTime
objecten maar DateTime
bewaart ook alles:
> '2012-12-31T01:01:01.232323+3'.to_datetime.strftime('%Y-%m-%d %H:%M:%S.%N')
=> "2012-12-31 01:01:01.232323000"
Kijk eens op connection_adapters/column.rb
in de ActiveRecord-bron en controleer wat de string_to_time
methode doet. Je string zou naar beneden gaan in de fallback_string_to_time
pad en dat behoudt fractionele seconden zo dicht als ik kan zien. Er zou ergens anders iets vreemds aan de hand kunnen zijn, het zou me niet verbazen gezien de vreemde dingen die ik in de Rails-bron heb gezien, vooral de databasekant. Ik zou proberen de strings met de hand naar objecten te converteren, zodat ActiveRecord er van af blijft.