Как преобразовывают строку в ActiveSupport:: TimeWithZone?

Я должен обновить поле (названный updated_at). Поле в MySQL имеет тип datetime, и класс ActiveSupport::TimeWithZone. Но даты являются строками как "10/17/2008". Я использовал "10/17/2008".to_date (И я предназначаю .to_time и .to_datetime), и даже если в консоли класс ActiveRecord сохраняет успешно, поле в базе данных все еще является текущей датой.

6
задан user664833 18 April 2014 в 16:37
поделиться

1 ответ

Ладно ... давайте возьмем их по одному.

Во-первых, не рекомендуется устанавливать имя поля updated_at , поскольку это «магическое» поле, которое автоматически заполняется Rails.

Если вы хотите отключить эту функцию, вы можете:

class Foo < ActiveRecord::Base
  self.record_timestamps = false
end

в своем классе, но это также отключит поля created_at .

Лучшим вариантом является добавление нового поля (например, my_updated_at ) в качестве даты в базе данных, и тогда Rails автоматически обработает преобразования, что означает, что следующий фрагмент будет работать:

Foo.new({:my_updated_at => "10/17/2008"})

Во-вторых, ответ о том, как разобрать строку в ActiveSupport :: TimeWithZone :

ActiveSupport::TimeZone['UTC'].parse("10/17/2008")

, но я не думаю, что это поможет вам (конечно, измените UTC на вашу текущую дату / время).

5
ответ дан 17 December 2019 в 02:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: