Вставка 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

Спасибо.

Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
3
0
8 462
2

Ответы 2

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

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

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

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

по какой-то причине я делал CallLog.callstart = Date.new. которые устанавливают значение 0000-00-00 00:00:00. на основе этого ответа я изменил его на CallLog.callstart = Time.now, и теперь я чувствую себя намного лучше.

Kinjal Dixit 23.10.2009 17:27

Другие вопросы по теме