Rails рендерит json на внешний интерфейс AngularJS. Время становится 00:00:00 - PullRequest
0 голосов
/ 28 июня 2018

Я использую метод рендера Rails для передачи рендеринга json во внешний интерфейс AngularJS. Даты были успешно пройдены. Когда я пытаюсь puts в бэкэнде, визуализированный объект json также имеет правильное время. Но почему-то все время становится 00:00:00 во внешнем интерфейсе.

Код в бэкенде Rails:

... // a lot of other stuff

respond_to do |format|
  format.json do
    render json: @entries
  end
end

Код в интерфейсе AngularJS:

XXX.query(params).then((response) => {
  console.log(response);
  ...
  // a lot of other stuff
}

Часть ответа, напечатанная в бэкэнде:

[{"id":101752,"version":1,"date":"2018-06-01T00:00:00.000Z","date_created":"2018-06-02T01:56:44.000Z","last_updated":"2018-06-02T01:56:44.000Z"},{"date":"2018-06-04T00:00:00.000Z","date_created":"2018-06-05T03:36:14.000Z","last_updated":"2018-06-05T03:36:14.000Z"}]

Вы можете видеть, что все временные метки имеют время (за исключением «даты», где для времени должно быть только 00:00:00). Однако, когда он достигает внешнего интерфейса, все временные метки становятся просто 00:00:00.

Часть ответа, напечатанная во внешнем интерфейсе:

Интерфейс ответа JSON print out.png

Прямо сейчас единственный способ, который я знаю, чтобы исправить это, это добавить функцию в сериализатор для каждой временной метки, используя strftime (). Он преобразует метки времени в строки, прежде чем они будут преобразованы в JSON. Но это было бы ОЧЕНЬ неэффективно, поскольку мне нужно добавить функцию strftime () для каждого сериализатора для каждой временной метки. У кого-нибудь есть лучшее решение? Кроме того, кто-нибудь знает, что на самом деле происходит с методом рельсов и метками времени?

1 Ответ

0 голосов
/ 02 июля 2018

Нашел решение. Интерфейс AngularJS не распознает формат даты по умолчанию в JSON, отображаемый Rails. В файле config/initializer/ams.rb вы можете отключить стандартный формат времени JSON, добавив строку ActiveSupport::JSON::Encoding.use_standard_json_time_format = false. Это повлияет на существующий формат даты и времени веб-интерфейса, но успешно позволяет AngularJS распознавать TimeWithZone, визуализированный в JSON Rails.

...