ActiveRecord bör bevara hela precisionen från databasen, du tittar bara inte på den ordentligt. Använd strftime
och %N
formatera för att se bråkdelssekunderna. Till exempel, psql
säger så här:
=> select created_at from models where id = 1;
created_at
----------------------------
2012-02-07 07:36:20.949641
(1 row)
och ActiveRecord säger detta:
> Model.find(1).created_at.strftime('%Y-%m-%d %H:%M:%S.%N')
=> "2012-02-07 07:36:20.949641000"
Så allt finns där, du behöver bara veta hur du ser det.
Observera också att ActiveRecord förmodligen kommer att ge dig ActiveSupport::TimeWithZone
objekt istället för DateTime
objekt men DateTime
bevarar allt också:
> '2012-12-31T01:01:01.232323+3'.to_datetime.strftime('%Y-%m-%d %H:%M:%S.%N')
=> "2012-12-31 01:01:01.232323000"
Ta en titt på connection_adapters/column.rb
i ActiveRecord-källan och kontrollera vilken string_to_time
metoden gör. Din sträng skulle gå ned fallback_string_to_time
väg och det bevarar bråkdelar av sekunder så nära jag kan säga. Något konstigt kan hända någon annanstans, jag skulle inte bli förvånad med tanke på de konstiga saker jag har sett i Rails-källan, särskilt databassidan av saker. Jag skulle försöka konvertera strängarna till objekt för hand så att ActiveRecord håller händerna borta från dem.