2015-07-28 9 views
1

Я использую rails 4. Мне нужно, чтобы глобальный формат даты и времени был установлен как "%Y-%m-%d %H:%M:%S %z" i.e 2015-07-29 02:34:38 +0530. Я попытался переопределить метод as_json, который работает, но когда я использую его с delayed_job, он сериализует объект, который преобразует поле datetime в 2015-07-29 02:34:38 UTC.Изменение форматирования даты и времени при десерилизации в рельсах 4

class ActiveSupport::TimeWithZone 
    def as_json(options = {}) 
    strftime('%Y-%m-%d %H:%M:%S %z') 
    end 
end 

Будет ли это работать, если serializable_hash метод переопределен в глобальном масштабе? Если да, как я могу?

ответ

1

Я решил эту проблему, переопределив TimeZoneCOnverter.

module ActiveRecord 
    module AttributeMethods 
    module TimeZoneConversion 
     class TimeZoneConverter 
     def convert_time_to_time_zone(value) 
      if value.is_a?(Array) 
      value.map { |v| convert_time_to_time_zone(v) } 
      elsif value.acts_like?(:time) 
      # changed from value.in_time_zone to 
      value.to_time 
      else 
      value 
      end 
     end 
     end 
    end 
    end 
end 

delayed_job сериализует атрибуты объекта, сохраняя его type и value для временного типа объекта зоны ActiveRecord::AttributeMethods::TimeZoneConversion::TimeZoneConverter которого deserialize метода вызывает convert_time_to_time_zone(value), переопределив его я получил формат, который я хотел.

0

Переопределение to_json изменяет поведение, когда экземпляр TimeWithZone сериализуется в JSON; однако, как вы, возможно, заметили, DelayedJob сериализуется в YAML. Вы можете просто указать Rails для использования формата даты и времени по умолчанию везде, но с методами от this thread. Например, добавьте файл с именем config/initializers/datetime.rb с содержимым:

Time::DATE_FORMATS[:default] = "%Y-%m-%d %H:%M:%S %z" 

который перепишет формат по умолчанию каждый раз, когда время преобразуется в строку.

+0

Я тоже пробовал это, но все равно возвращаюсь в '2015-07-21 16:01:33 UTC' этот формат только – Datt

Смежные вопросы