2013-07-03 8 views
9

Ich verwende JBuilder, um die Ansichten der JSON API Teil meiner Anwendung zu rendern. Das Problem, das ich in laufen lasse, ist, dass meine Datetime wie folgt wiedergegeben werden:Rails jbuilder DateTime Dezimalstellen zu Sekunde hinzufügen

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

... wenn das, was ich wirklich will, ist dies:

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

ich bin nicht sicher, wo diese Dezimalstellen von ...

kommenden

ich das Feld in der typischen Art und Weise JBuilder Rendering:

json.my_datetime_field 

Ich habe ein Datumsformat initializer in meiner App:

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' 

Dies ist jedoch nicht auszuwirken JBuilder scheint, und das ist gut. Ich möchte das ISO8601-Format von meiner API erhalten. Ich bin übrigens auf Rails 4.0.0 final.

+1

Nicht sicher über JBuilder-Einstellungen, aber FYI - Nachkommastellen sind in ISO8601 zulässig. 3 Plätze sind üblich, aber auch 6 oder 7 Plätze. –

+0

Ja, ich habe gekürzt und den Datumsformatierer des Client-Parsers geändert, um Bruchteile von Sekunden zu ermöglichen. Ich werde diese Frage hier lassen, falls jemand weiß, wie er die Ausgabe von jbuilder tatsächlich ändern kann. Der nächste, den ich je gesehen habe, ist DateTime von Affen zu patchen, um mit "as_json" zurückzukehren, was ich will, aber das scheint echt hacky zu sein. – elsurudo

Antwort

10

unter Schienen mit? kodieren mit Schwimmer zu vermeiden, diese Methode auf initialize Block auf Ihrem Projekt läuft für mich

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

Ich habe dies erlebt, während ich versuchte, ein Format zugänglicher für iPhone-Anwendungen zu machen. Sie könnten die .strftime Methode verwenden.

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

eine json Feld namens erstellen my_datetime_field

{ "my_datetime_field": timestamp_goes_here } 
0

Diese Arbeit.

/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