Ruby on Rails 3: Как переопределить / изменить сериализацию as_json для ActiveSupport :: TimeWithZone? - PullRequest
0 голосов
/ 23 сентября 2011

Когда Rails3 сериализует ActiveSupport :: TimeWithZone в json, даты выглядят примерно так:

"2011-07-20T23: 59: 00-07: 00"

... это должно быть ...

"2011-07-20T23: 59: 00-0700"

Последнее двоеточие проблематично при попытке преобразовать эту строку, используя стандартные шаблоны форматирования даты ... ни один из них не учитывает использование двоеточия!

Итак, мой вопрос: «Как переопределить / изменить сериализацию для TimeWithZone, чтобы as_json возвращал допустимую строку, которую можно понять, используя стандартные шаблоны формата даты?»

Прямо сейчас мне нужно удалить это последнее двоеточие в моем клиентском приложении, но это выглядит как пес.

1 Ответ

1 голос
/ 23 сентября 2011

Это патч обезьяны , но эй, это Ruby, и это разрешено.

module ActiveSupport
  class TimeWithZone
    def to_json
      super.gsub(/:(?!.*:)/,'')
    end
  end
end

Протестировано с помощью:

Time.zone = 'Eastern Time (US & Canada)'
Time.zone.now.to_json # Outputs -> 2011-09-22T16:46:28-0400
...