Вставка DATETIME с ActiveRecord и MySQL

У меня проблема с ActiveRecord, вставляющим DATETIME в соответствии с документацией; «Active Record автоматически отмечает время операций создания и обновления, если в таблице есть поля с именами created_at/created_on или updated_at/updated_on». У меня есть столбец с именем created_at, но ActiveRecord не вставляет DATETIME. Мой запрос на вставку выглядит следующим образом:

def add_record(server_id, backup_type)
  Record.create(:server_id => server_id, :backup_type => backup_type)
end

Я знаю, что могу вставить время, используя что-то вроде

:created_at => "#{Time.now.strftime("%Y-%m-%d %H:%M:%S")}"

Причина, по которой я хочу держаться подальше от этого, связана с разницей во времени между серверами, как локально, так и географически. Мне интересно, есть ли способ запустить тип в том же методе создания, например:

def add_record(server_id, backup_type)
  Record.create(:server_id => server_id, :backup_type => backup_type, created_at => DATETIME())
end

Спасибо.


person ryanklein    schedule 20.01.2009    source источник


Ответы (2)


У вас есть столбец created_at, но ActiveRecord не создает отметку времени? Какой тип столбца у вашего столбца created_at? Может быть, вы могли бы показать нам свою миграцию?

Кроме того, если вы укажете Rails использовать UTC (я думаю, по умолчанию в 2.2), значения времени будут правильными, независимо от разных локалей сервера.

И, наконец: вы можете просто передать экземпляр времени/даты/даты и времени, вам не нужно форматировать его самостоятельно. Например. YourModel.create(:a_time_column => Time.now)

person August Lilleaas    schedule 20.01.2009
comment
по какой-то причине я делал CallLog.callstart = Date.new. который устанавливает значение 0000-00-00 00:00:00. основываясь на этом ответе, я изменил его на CallLog.callstart = Time.now, и теперь я чувствую себя намного лучше. - person Kinjal Dixit; 23.10.2009

Если тип поля created_at TimeStamp, вы можете использовать функция CURRENT_TIMESTAMP() для установки значения поля.

person Noah Goodrich    schedule 20.01.2009