ActiveRecord devrait conserver toute la précision de la base de données, vous ne la regardez pas correctement. Utilisez strftime
et le %N
format pour voir les fractions de secondes. Par exemple, psql
dit ceci :
=> select created_at from models where id = 1;
created_at
----------------------------
2012-02-07 07:36:20.949641
(1 row)
et ActiveRecord dit ceci :
> Model.find(1).created_at.strftime('%Y-%m-%d %H:%M:%S.%N')
=> "2012-02-07 07:36:20.949641000"
Alors tout y est, il suffit de savoir comment le voir.
Notez également qu'ActiveRecord vous donnera probablement ActiveSupport::TimeWithZone
objets plutôt que DateTime
objets mais DateTime
conserve tout aussi :
> '2012-12-31T01:01:01.232323+3'.to_datetime.strftime('%Y-%m-%d %H:%M:%S.%N')
=> "2012-12-31 01:01:01.232323000"
Jetez un œil à connection_adapters/column.rb
dans la source ActiveRecord et vérifiez ce que le string_to_time
méthode le fait. Votre chaîne descendrait le fallback_string_to_time
chemin et qui préserve les fractions de seconde aussi près que je sache. Quelque chose d'étrange pourrait se passer ailleurs, je ne serais pas surpris étant donné les choses étranges que j'ai vues dans la source Rails, en particulier du côté de la base de données. J'essaierais de convertir les chaînes en objets à la main afin qu'ActiveRecord ne les touche pas.