2012-09-21 10 views
7

मैं सक्रिय_मोडेल_सिरियालाइजर्स और ember.js का उपयोग कर रहा हूं। मेरे मॉडल में से एक तिथि विशेषता है। रेल तिथि गुणों में "YYYY-MM-DD" के प्रारूप में क्रमबद्ध किया जाता है।धारावाहिक दिनांक गुण

समस्या; जब एम्बर-डेटा जावास्क्रिप्ट दिनांक कन्स्ट्रक्टर का उपयोग कर तारीख को डी-सीरियलाइज करता है तो यह एक "गलत" टाइमज़ोन मानता है।

* गलत शब्द नहीं है लेकिन यह गलत है क्योंकि मैं इसे वर्तमान टाइमज़ोन में डिफ़ॉल्ट करना चाहता हूं। DS.Model date attribute parses date (YYYY-MM-DD) incorrectly

मुझे लगता है कि active_model_serializer को डेट विशेषता लेनी चाहिए और इसे iso8601 प्रारूप में परिवर्तित करना चाहिए।

Object.date.to_time_in_current_zone.iso8601 

क्या सक्रिय_model_serializers को सभी दिनांक वस्तुओं को क्रमबद्ध करने का तरीका है? या मुझे जावास्क्रिप्ट में टाइमज़ोन समस्या को ठीक करना चाहिए?

उत्तर

7

मेरा वर्तमान समाधान यहां है, लेकिन मुझे लगता है कि यह परिभाषित करना संभव होना चाहिए कि तारीख वस्तुओं को विश्व स्तर पर क्रमबद्ध कैसे किया जाता है।

class InvoiceSerializer < ActiveModel::Serializer 
    attributes :id, :customer_id, :balance 

    def attributes 
    hash = super 
    hash['date'] = object.date.to_time_in_current_zone.iso8601 if object.date 
    hash 
    end 
end 

अद्यतन

मेरे पसंदीदा समाधान अब पैच ActiveSupport::TimeWithZone.as_json विधि बंदर है।

#config/initializers/time.rb 
module ActiveSupport 
    class TimeWithZone 
    def as_json(options = nil) 
     time.iso8601 
    end 
    end 
end 

class InvoiceSerializer < ActiveModel::Serializer 
    attributes :id, :customer_id, :balance, :date 
end 
+1

तुम भी एक मनमाना विशेषता जोड़ सकते हैं: 'गुण: आईडी,: CUSTOMER_ID,: संतुलन,: date' और फिर बस को लागू' डीईएफ़ date' बजाय खिलवाड़ की पूरे गुण हैश के साथ। – awendt

1

ActiveSupport (4.2) तिथियों के अंतिम संस्करण में iso8601 प्रारूप के अंतर्गत हैं। आपको अब बंदर पैच की आवश्यकता नहीं है। आप उत्पादन प्रारूप कॉन्फ़िगर कर सकते हैं

#config/initializers/time.rb 
ActiveSupport::JSON::Encoding.use_standard_json_time_format = true # iso8601 format 
ActiveSupport::JSON::Encoding.time_precision = 3 # for millisecondes 

See the doc

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