ActiveRecord sollte die volle Genauigkeit aus der Datenbank erhalten, Sie sehen es sich einfach nicht richtig an. Verwenden Sie strftime
und der %N
Format, um die Sekundenbruchteile anzuzeigen. Beispiel:psql
sagt dies:
=> select created_at from models where id = 1;
created_at
----------------------------
2012-02-07 07:36:20.949641
(1 row)
und ActiveRecord sagt Folgendes:
> Model.find(1).created_at.strftime('%Y-%m-%d %H:%M:%S.%N')
=> "2012-02-07 07:36:20.949641000"
Es ist also alles da, man muss nur wissen, wie man es sieht.
Beachten Sie auch, dass ActiveRecord Ihnen wahrscheinlich ActiveSupport::TimeWithZone
geben wird Objekte statt DateTime
Objekte, aber DateTime
bewahrt auch alles:
> '2012-12-31T01:01:01.232323+3'.to_datetime.strftime('%Y-%m-%d %H:%M:%S.%N')
=> "2012-12-31 01:01:01.232323000"
Schauen Sie sich connection_adapters/column.rb
an in der ActiveRecord-Quelle und überprüfen Sie, was die string_to_time
Methode tut. Ihre Zeichenfolge würde fallback_string_to_time
nach unten gehen Pfad und das bewahrt Bruchteile von Sekunden, soweit ich das beurteilen kann. An anderer Stelle könnte etwas Seltsames vor sich gehen, ich wäre nicht überrascht angesichts der seltsamen Dinge, die ich in der Rails-Quelle gesehen habe, insbesondere auf der Seite der Datenbank. Ich würde versuchen, die Strings von Hand in Objekte umzuwandeln, damit ActiveRecord die Finger davon lässt.