ActiveRecord powinien zachować pełną precyzję z bazy danych, po prostu nie patrzysz na nią właściwie. Użyj strftime i %N format, aby zobaczyć ułamki sekund. Na przykład psql mówi to:
=> select created_at from models where id = 1;
created_at
----------------------------
2012-02-07 07:36:20.949641
(1 row)
a ActiveRecord mówi tak:
> Model.find(1).created_at.strftime('%Y-%m-%d %H:%M:%S.%N')
=> "2012-02-07 07:36:20.949641000"
Więc wszystko tam jest, musisz tylko wiedzieć, jak to zobaczyć.
Pamiętaj też, że ActiveRecord prawdopodobnie zapewni Ci ActiveSupport::TimeWithZone obiekty zamiast DateTime obiekty, ale DateTime zachowuje wszystko:
> '2012-12-31T01:01:01.232323+3'.to_datetime.strftime('%Y-%m-%d %H:%M:%S.%N')
=> "2012-12-31 01:01:01.232323000"
Spójrz na connection_adapters/column.rb w źródle ActiveRecord i sprawdź, co string_to_time metoda robi. Twój ciąg spadnie poniżej fallback_string_to_time ścieżka i to zachowuje ułamki sekund tak blisko, jak mogę to powiedzieć. Coś dziwnego może dziać się gdzie indziej, nie byłbym zaskoczony, biorąc pod uwagę dziwne rzeczy, które widziałem w źródle Rails, zwłaszcza po stronie bazy danych. Spróbowałbym przekonwertować ciągi na obiekty ręcznie, aby ActiveRecord trzymał je z daleka.