Как преобразовать строку в ActiveSupport :: TimeWithZone? - PullRequest
6 голосов
/ 09 апреля 2010

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

Ответы [ 2 ]

5 голосов
/ 13 апреля 2010

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

Во-первых, не рекомендуется устанавливать имя поля 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 на текущую дату / время).

1 голос
/ 02 февраля 2019

Просто

date_as_string = "2008-10-17"
ActiveSupport::TimeZone['UTC'].parse(date_as_string)

# => Fri, 17 Oct 2008 00:00:00 UTC +00:00


И просто чтобы подтвердить, что это сработало ..

ActiveSupport::TimeZone['UTC'].parse(date_as_string).class

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