【问题标题】:Rails 4 ActiveRecord::Base.connection.execute to_json encodes DateTime incorrectlyRails 4 ActiveRecord::Base.connection.execute to_json 错误地编码 DateTime
【发布时间】:2014-03-01 01:52:27
【问题描述】:

最终的结果是让我的模型读取以“manager_”开头的所有表,并将记录序列化为 JSON,以传输到从属应用程序,该从属应用程序会将 JSON 字符串作为同步过程写回其数据库。

即,DB > JSON >(通过网络传输)> JSON > DB

我现在遇到的问题是 DateTime 对象在最后的时区内用冒号编码,当尝试将属性写入数据库时​​,mysql 正在呕吐。我已经在其他地方读到了,所以我需要对方法进行猴子补丁:

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

【问题讨论】:

    标签: mysql ruby-on-rails json activerecord ruby-on-rails-4


    【解决方案1】:

    从头开始,在写入数据库时​​,我无法获得该格式的时间戳。要使用的正确格式是2014-02-28 20:37:13

    我必须使用以下内容同时修补 TimeWithZone 和 Time 类:

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

    这将影响任何其他与数据库同步无关的 to_json 调用,因此我的时间戳将不再有时区,但我愿意牺牲这一点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-20
      • 2017-01-13
      • 1970-01-01
      • 2012-12-12
      • 2015-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多