2011-08-07 20 views
11

के लिए create_at के साथ मिलीसेकंड शामिल करें, मैं अपने रेल ऐप को अपने मॉडल के created_at फ़ील्ड के साथ मिलीसेकंड जानकारी हमेशा शामिल करने के लिए कैसे संशोधित करूं?रेल: हमेशा प्रत्येक मॉडल

This question का उत्तर किसी व्यक्तिगत मॉडल के लिए इसे कैसे करना है, लेकिन मैं इसे वैश्विक रूप से करना चाहता हूं।


उदाहरण के लिए, जब मैं अपने सभी Item मॉडल (किसी GET साथ /items मारकर) को पुनः प्राप्त, मैं निम्नलिखित JSON मिलती है:

[{"created_at":"2011-08-07T23:42:15Z","updated_at":"2011-08-07T23:42:15Z","id":180,"user_id":6,"content":"test"}] 

लेकिन ध्यान दें created_at क्षेत्र कोई भी नहीं है कि मिलीसेकंड के बारे में जानकारी जो इसे बनाया गया था। मैं अपने सभी मॉडलों के लिए कैसे शामिल करूं?

उत्तर

0

मैं this guide का उपयोग कर अपने आइटम मॉडल के लिए created_at विशेषता चयनकर्ता को ओवरराइड करने में सक्षम था।

कोई भी जानता है कि सभी मॉडलों के लिए इसे कैसे किया जाए?

+0

एक्टिवमोडेल से प्राप्त एक अमूर्त मॉडल बनाएं और अपने सभी मॉडल इसे प्राप्त करें, या इसे लाइब्रेरी मॉड्यूल में रखें और इसे हर जगह इसकी आवश्यकता/शामिल करें। –

4

ओवरराइड ActiveSupport::TimeWithZone#as_json मेरे लिए काम किया:

class ActiveSupport::TimeWithZone 

    def as_json(options = nil) 
    if ActiveSupport::JSON::Encoding.use_standard_json_time_format 
     xmlschema(3) 
    else 
     %(#{time.strftime("%Y/%m/%d %H:%M:%S")} #{formatted_offset(false)}) 
    end 
    end 

end 

एक फ़ाइल है कि आपके रेल एप्लिकेशन के लिए आवश्यक है में इस कोड डाल करने के लिए सुनिश्चित करें। अब जब मैं JSON करने के लिए एक created_at विशेषता कनवर्ट करते हैं, मैं मिलीसेकेंड मिलती है:

puts Post.last.created_at.to_json 
# => "2012-06-29T11:51:00.841Z" 
इसके अलावा

Time.zone उपयोग करने के लिए नई समय वस्तुओं का दृष्टांत को इतना है कि वे एक ही JSON व्यवहार दिखाने सुनिश्चित करें:

time = Time.zone.now 
puts time.to_json 
# => "2012-06-29T16:45:30.547Z" 

आशा यह किसी की मदद करता है!

16

रेल 4.1 और उसके बाद के लिए आप time_precision सेट कर सकते हैं, उदा। application.rb

ActiveSupport::JSON::Encoding.time_precision = 3 

वैसे में, मिलीसेकंड दिखा अब डिफ़ॉल्ट है, यह 0 पर सेट किया जा सकता है अगर वे छोड़ देना चाहिए। यह भी जानना अच्छा है कि .iso8601 में मिलीसेकंड शामिल नहीं है लेकिन .as_json उन्हें संरक्षित करता है।

+0

3: '2017-03-20T00: 06: 21.685-07: 00" ', 1:' "2017-03-20T00: 06: 21.6-07: 00" ', 0:' "2017-03-20T00 : 06: 21-07: 00 "' – Dorian

संबंधित मुद्दे