2011-08-07 38 views
11

Modellerimin created_at alanına her zaman milisaniye bilgilerini eklemek için Rails uygulamamı nasıl değiştirebilirim?Raylar: her zaman için her model için milisaniye değerini ekleyin

This question, tek bir model için nasıl yapılacağının cevabına sahiptir, ancak bunu global olarak yapmak istiyorum. Ben (bir GET ile /items vurarak) tüm Item modellerini almak Örneğin


, ben şu JSON olsun:

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

Ama created_at alan herhangi yoktur unutmayın oluşturulduğu milisaniye hakkında bilgi. Tüm modellerime bunu nasıl ekleyebilirim?

cevap

0

this guide kullanarak Öğe modelimin created_at öznitelik seçicisini geçersiz kılmayı başardım.

Herkes, tüm modeller için nasıl yapılacağını biliyor mu? Geçersiz kılma ActiveSupport::TimeWithZone#as_json

+0

ActiveModel'den miras alınan ve tüm modellerin bundan devraldığı veya bir kitaplık modülüne yerleştirip gereksinim duyduğunuz her yere gereksinim duyduğunuz/dahil edeceğiniz soyut bir model oluşturun. –

4

benim için çalıştı:

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 

sizin Raylar Uygulama için gereken bir dosyada bu kodu koymak emin olun. Ben JSON bir created_at niteliği dönüştürdüğünüzde Şimdi, milisaniye almak:

Ayrıca
puts Post.last.created_at.to_json 
# => "2012-06-29T11:51:00.841Z" 

aynı JSON davranışı göstermek, böylece yeni Zaman nesne örneğini oluşturmak için Time.zone kullandığınızdan emin olun:

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

Umut Bu birisi yardımcı olur!

16

Raylar 4.1 ve üzeri için time_precision, örn. onlar atlanmalıdır eğer arada application.rb

ActiveSupport::JSON::Encoding.time_precision = 3 

yılında, milisaniye gösteren varsayılan şimdi, bu 0'a ayarlanabilir. Ayrıca, .iso8601'un milisaniye içermediğini, ancak .as_json'un bunları koruduğunu bilmeniz iyi olur.

+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

İlgili konular