ActiveRecord debería conservar la precisión total de la base de datos, simplemente no la está mirando correctamente. Usar strftime
y el %N
formato para ver las fracciones de segundo. Por ejemplo, psql
dice esto:
=> select created_at from models where id = 1;
created_at
----------------------------
2012-02-07 07:36:20.949641
(1 row)
y ActiveRecord dice esto:
> Model.find(1).created_at.strftime('%Y-%m-%d %H:%M:%S.%N')
=> "2012-02-07 07:36:20.949641000"
Entonces todo está ahí, solo necesitas saber cómo verlo.
También tenga en cuenta que ActiveRecord probablemente le dará ActiveSupport::TimeWithZone
objetos en lugar de DateTime
objetos pero DateTime
conserva todo también:
> '2012-12-31T01:01:01.232323+3'.to_datetime.strftime('%Y-%m-%d %H:%M:%S.%N')
=> "2012-12-31 01:01:01.232323000"
Eche un vistazo a connection_adapters/column.rb
en la fuente de ActiveRecord y compruebe qué string_to_time
el método lo hace. Su cadena bajaría el fallback_string_to_time
ruta y que conserva fracciones de segundo tan cerca como puedo decir. Algo extraño podría estar pasando en otro lugar, no me sorprendería dadas las cosas extrañas que he visto en el código fuente de Rails, especialmente en el lado de la base de datos. Intentaría convertir las cadenas en objetos a mano para que ActiveRecord no los toque.