Rails: всегда включайте миллисекунды с create_at для каждой модели - PullRequest
13 голосов
/ 08 августа 2011

Как мне изменить приложение Rails, чтобы оно всегда включало информацию о миллисекундах в поле created_at моих моделей?

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


Например, когда я получаю все мои Item модели (нажав /items с помощью GET), я получаю следующий JSON:

[{"created_at":"2011-08-07T23:42:15Z","updated_at":"2011-08-07T23:42:15Z","id":180,"user_id":6,"content":"test"}]

Но обратите внимание, что поле created_at не содержит никакой информации о миллисекунде, в которой оно было создано. Как включить это для всех моих моделей?

Ответы [ 3 ]

19 голосов
/ 15 декабря 2014

Для Rails 4.1 и выше вы можете установить time_precision , например, в application.rb

ActiveSupport::JSON::Encoding.time_precision = 3

Кстати, показ миллисекунд теперь является значением по умолчанию, его можно установитьдо 0, если они должны быть опущены.Также полезно знать, что .iso8601 не включает миллисекунды, но .as_json сохраняет их.

4 голосов
/ 29 июня 2012

Переопределение ActiveSupport::TimeWithZone#as_json у меня сработало:

class ActiveSupport::TimeWithZone

  def as_json(options = nil)
    if ActiveSupport::JSON::Encoding.use_standard_json_time_format
      xmlschema(3)
    else
      %(#{time.strftime("%Y/%m/%d %H:%M:%S")} #{formatted_offset(false)})
    end
  end

end

Обязательно поместите этот код в файл, который требуется вашему приложению Rails. Теперь, когда я конвертирую атрибут made_at в JSON, я получаю миллисекунды:

puts Post.last.created_at.to_json
# => "2012-06-29T11:51:00.841Z"

Также убедитесь, что вы используете Time.zone для создания экземпляров новых объектов Time, чтобы они демонстрировали то же поведение JSON:

time = Time.zone.now
puts time.to_json
# => "2012-06-29T16:45:30.547Z"

Надеюсь, это кому-нибудь поможет!

0 голосов
/ 08 августа 2011

Мне удалось переопределить селектор атрибута created_at для моей модели элемента, используя это руководство .

Кто-нибудь знает, как это сделать для всех моделей?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...