ActiveRecord dovrebbe preservare la piena precisione dal database, semplicemente non lo stai guardando correttamente. Usa strftime
e il %N
format per vedere i secondi frazionari. Ad esempio, psql
dice questo:
=> select created_at from models where id = 1;
created_at
----------------------------
2012-02-07 07:36:20.949641
(1 row)
e ActiveRecord dice questo:
> Model.find(1).created_at.strftime('%Y-%m-%d %H:%M:%S.%N')
=> "2012-02-07 07:36:20.949641000"
Quindi è tutto lì, devi solo sapere come vederlo.
Nota anche che ActiveRecord probabilmente ti darà ActiveSupport::TimeWithZone
oggetti anziché DateTime
oggetti ma DateTime
conserva tutto anche:
> '2012-12-31T01:01:01.232323+3'.to_datetime.strftime('%Y-%m-%d %H:%M:%S.%N')
=> "2012-12-31 01:01:01.232323000"
Dai un'occhiata a connection_adapters/column.rb
nel sorgente ActiveRecord e controlla cosa è il string_to_time
metodo fa. La tua stringa scenderebbe nel fallback_string_to_time
percorso e che conserva frazioni di secondi il più vicino possibile. Qualcosa di strano potrebbe succedere altrove, non sarei sorpreso date le cose strane che ho visto nel sorgente di Rails, in particolare il lato del database delle cose. Proverei a convertire manualmente le stringhe in oggetti in modo che ActiveRecord tenga le mani lontane da esse.