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 से नीचे चली जाएगी पथ और वह जितना मैं बता सकता हूं, आंशिक सेकंड को सुरक्षित रखता है। कहीं और कुछ अजीब हो सकता है, रेल स्रोत में मैंने जो अजीब चीजें देखी हैं, विशेष रूप से चीजों के डेटाबेस पक्ष को देखते हुए मुझे आश्चर्य नहीं होगा। मैं स्ट्रिंग्स को ऑब्जेक्ट्स में हाथ से कनवर्ट करने का प्रयास करता हूं ताकि ActiveRecord अपने हाथों को उनसे दूर रखे।