ActiveRecord harus mempertahankan presisi penuh dari database, Anda hanya tidak melihatnya dengan benar. Gunakan strftime dan %N format untuk melihat pecahan detik. Misalnya, psql mengatakan ini:
=> select created_at from models where id = 1;
created_at
----------------------------
2012-02-07 07:36:20.949641
(1 row)
dan ActiveRecord mengatakan ini:
> Model.find(1).created_at.strftime('%Y-%m-%d %H:%M:%S.%N')
=> "2012-02-07 07:36:20.949641000"
Jadi semuanya ada di sana, Anda hanya perlu tahu cara melihatnya.
Perhatikan juga bahwa ActiveRecord mungkin akan memberi Anda ActiveSupport::TimeWithZone objek daripada DateTime objek tetapi DateTime mempertahankan semuanya juga:
> '2012-12-31T01:01:01.232323+3'.to_datetime.strftime('%Y-%m-%d %H:%M:%S.%N')
=> "2012-12-31 01:01:01.232323000"
Lihat connection_adapters/column.rb di sumber ActiveRecord dan periksa apa string_to_time metode tidak. String Anda akan turun fallback_string_to_time path dan itu mempertahankan pecahan detik sedekat yang saya tahu. Sesuatu yang aneh bisa terjadi di tempat lain, saya tidak akan terkejut mengingat hal-hal aneh yang saya lihat di sumber Rails, terutama sisi database. Saya akan mencoba mengonversi string menjadi objek dengan tangan sehingga ActiveRecord akan menjauhkannya dari mereka.