ActiveRecordはデータベースからの完全な精度を維持する必要があります、あなたはそれを正しく見ていません。 strftimeを使用する および%N 分数秒を表示するためのフォーマット。たとえば、psql これは言う:
=> select created_at from models where id = 1;
created_at
----------------------------
2012-02-07 07:36:20.949641
(1 row)
そしてActiveRecordはこれを言います:
> Model.find(1).created_at.strftime('%Y-%m-%d %H:%M:%S.%N')
=> "2012-02-07 07:36:20.949641000"
だから、すべてがそこにあります、あなたはそれを見る方法を知る必要があります。
また、ActiveRecordはおそらくActiveSupport::TimeWithZoneを提供することに注意してください DateTimeではなくオブジェクト オブジェクトがDateTime すべても保存します:
> '2012-12-31T01:01:01.232323+3'.to_datetime.strftime('%Y-%m-%d %H:%M:%S.%N')
=> "2012-12-31 01:01:01.232323000"
connection_adapters/column.rbをご覧ください ActiveRecordソースで、string_to_timeが何であるかを確認します メソッドは行います。文字列はfallback_string_to_timeに移動します パスとそれは私が言うことができる限り近くの分数秒を保存します。 Railsのソースで見た奇妙なこと、特にデータベース側のことを考えれば、他の場所で何か奇妙なことが起こっている可能性があります。 ActiveRecordが文字列から手を離すように、文字列を手動でオブジェクトに変換してみます。