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 да държи ръцете си далеч от тях.