簡體   English   中英

Rails 4 ActiveRecord :: Base.connection.execute to_json對DateTime的編碼不正確

[英]Rails 4 ActiveRecord::Base.connection.execute to_json encodes DateTime incorrectly

最終的結果是讓我的模型讀取所有以“ manager_”開頭的表,並將記錄序列化為JSON以傳輸到從屬應用程序,該應用程序將JSON字符串作為同步過程寫回到其數據庫中。

即,DB> JSON>(通過Web傳輸)> JSON> DB

我現在遇到的問題是,DateTime對象在最后的時區中用冒號進行了編碼,而在嘗試將屬性寫入db時,mysql正在倒轉。 我在SO上的其他地方已經讀到了,因此我需要對方法進行修補:

module ActiveSupport
  class TimeWithZone
    # There shouldn't be a colon in the timezone for storing into the db
    def to_json
      super.gsub(/:(?!.*:)/,'')
    end
  end
end

但是,例如,盡管這適用於對Time.zone.now的調用,但不適用於直接的Time.now,因此仍在時區中使用冒號對記錄進行序列化。

我得到的是: 2014-02-28T20:37:13-05:00

我應該得到的是: 2014-02-28T20:37:13-0500

請注意,在寫入數據庫時​​,我無法使用該格式的時間戳。 正確使用的格式是2014-02-28 20:37:13

我必須使用以下內容同時對TimeWithZone和Time類進行修補:

def as_json(options=nil)
    return to_s(:db)
end

這將影響與數據庫同步無關的任何其他to_json調用,因此我的時間戳將不再具有時區,但我願意犧牲這個時區。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM