Ruby datetime подходит для сравнения mysql

Рельсы были хороши с автоматической вставкой правильно отформатированных datetimes в MySql без необходимости, чтобы я много думал об этом.

Однако для выполнения проверки мне нужно проверить, превышает ли хранимое значение mysql datetime (т.е. 2008-07-02 18:00:00) больше или меньше, чем "сейчас". Я могу вызвать DateTime.now или Time.now, но как я могу преобразовать это в формат, который нравится mysql?

Спасибо

Ответ 1

Вы можете использовать to_s(:db) для преобразования в формат, дружественный к базе данных.

Time.now.to_s(:db)

Однако будьте осторожны, если у вас есть часовой пояс, указанный в Rails, потому что время будет храниться в UTC в базе данных. Вам нужно указать, что делать правильные сравнения.

Time.now.utc.to_s(:db)

Вы также можете использовать функцию NOW() в MySQL вместо генерации текущего времени в Ruby.

Ответ 2

Вам не нужно. Пусть Rails выполнит вашу работу:

Если ваша модель Widget, это найдет все виджеты, созданные в последний день:

Thing.find(:all, :condition => ["created_at > ?", Time.now - 1.day])

Rails автоматически преобразует временную метку в правильный формат.