Rails 4 ActiveRecord :: Base.connection.execute to_json错误地编码DateTime

时间:2014-03-01 01:52:28

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

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

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

我现在遇到的问题是DateTime对象在末尾的时区内使用冒号进行编码,而mysql在尝试将属性写入db时正在进行barfing。我已经在其他地方读到了我需要对这个方法进行monkeypatch:

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

1 个答案:

答案 0 :(得分:0)

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

我必须使用以下内容对TimeWithZone和Time类进行monkeypatch:

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

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