2013-07-03 8 views
9

Używam JBuilder do renderowania widoków JSON API części mojej aplikacji. Problem biegnę na to, że moje DateTimes są renderowane tak:Rails jbuilder DateTime dodawanie miejsc dziesiętnych do drugiego

„2013-07-02T17: 03: 18.000Z”

... kiedy to, co naprawdę chcę to:

"2013-07-02T17: 03: 18Z"

nie jestem pewien, gdzie te pochodzą dziesiętne ...

mam renderowania boiska w typowym JBuilder sposób:

json.my_datetime_field 

Mam format daty inicjatora w mojej aplikacji:

Date::DATE_FORMATS[:default] = '%Y/%m/%d %Z' 
Time::DATE_FORMATS[:default] = '%Y/%m/%d %H:%M:%S %Z' 
Date::DATE_FORMATS[:month_day_year] = '%m-%d-%Y' 

to jednak nie wydaje się wpływać JBuilder, i to jest dobre. Chcę, aby format ISO8601 pochodził z mojego API. W końcu jestem na finałach Rails 4.0.0.

+1

Not sure about JBuilder's settings, ale FYI - ułamek sekundy po przecinku jest dozwolony w ISO8601. 3 miejsca są powszechne, ale są też 6 lub 7 miejsc. –

+0

Tak, zamknąłem i zmieniłem formater formatowania daty po stronie klienta, aby umożliwić ułamek sekund. Zostawię to pytanie na wypadek, gdyby ktoś wiedział, jak właściwie zmienić dane wyjściowe jbuildera. Najbliższy, do którego przyszedłem, jest łatanie Monkey DateTime, aby zwrócić to, co chcę z "as_json", ale to wydaje się naprawdę hacky. – elsurudo

Odpowiedz

10

używając pod szynami? uniknąć kodowanie z pływakiem, uruchom tę metodę na initialize bloku nad projektem

ActiveSupport::JSON::Encoding.time_precision = 0 
4

Doświadczyłem tego, próbując renderować format bardziej podatny na aplikacje iPhone. Można użyć metody .strftime.

json.my_datetime_field(object.timestamp.strftime('%Y/%m/%d %H:%M:%S %Z')) 

stworzy pole json nazwie my_datetime_field

{ "my_datetime_field": timestamp_goes_here } 
0

To praca dla mnie.

/view/api/earthquakes/index.json.jbuilder 

json.array!(@earthquakes) do |earthquake| 
    json.extract! earthquake, :id, 
       :name, 
       :magnitude, 
       :lat, 
       :lon, 
       :city, 
       :region, 
       :state, 
       :country, 
       :usgs_id, 
       :usgs_url, 
       :usgs_url_detail, 
       :num_structures 

    json.date(earthquake.date.strftime('%Y-%m-%d %H:%M:%S %Z')) 

end 
Powiązane problemy