Я создаю приложение Rails, которое создает заказы по расписанию.В расписании есть время в формате чч: мм и отметки для каждого дня недели.Метод периодически проверяет расписания и создает любые заказы, требуемые расписанием.
Сначала я строю время для заказа на этой неделе в объекте Ruby DateTime, затем проверяю, существует ли он, и создаю, если нет, например.:
order = Order.where( :delivery_datetime = del_datetime )
unless order.any?
Order.create( :status => 'Estimated', :delivery_datetime => del_datetime )
end
Это работает, как и ожидалось, на моей машине, но когда другие люди забрали его из хранилища, он каждый раз воссоздает заказы.Я исследовал SQL, который он использовал, и проблема, казалось, заключалась в том, что он создавал предложение where, немного отличающееся от оператора вставки:
SELECT COUNT(*) FROM orders WHERE delivery_datetime = '2011-06-30 18:00:00.000000'
INSERT INTO orders (delivery_datetime) VALUES ('2011-06-30 18:00:00.000000000')
Таким образом, разница заключается в трех дополнительных нулях в частичном втором поле.Я понимаю, что SQLite не имеет реальных типов дат, поэтому они отличаются только потому, что строки разные.Проблема, с которой я столкнулся сейчас, заключается в том, что я не могу принудительно установить формат вставленной строки.Например, даже если я сделаю следующее:
Order.create( :status => 'Estimated',
:delivery_datetime => del_datetime.strftime( '%Y-%m-%d %H:%M' ) )
оператор вставки все еще использует «стандартный» формат - но с 6 нулями в моем случае и 9 в другом.