【发布时间】:2011-09-25 20:54:30
【问题描述】:
我正在构建一个 Rails 应用程序,它根据计划创建订单。时间表有一个格式为 hh:mm 的时间,以及一周中的每一天的刻度。一个方法偶尔会检查计划,并创建计划所需的任何订单。
首先,我在 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 个。
【问题讨论】:
-
看起来很奇怪 - 我以前从未见过这种情况。你能告诉我们你用来实例化 del_datetime 变量的代码吗?您的 Order.where() 行也可以替换为 Order.find_by_delivery_dateime(del_datetime) 后跟“除非订单”。这将生成一个稍微不同的 SQL 查询 - 但不确定它是否能解决您的问题。
-
它是用这段可怕的代码实例化的:del_datetime = DateTime.parse(offset_datetime.strftime("%Y-%m-%d") + schedule.delivery_time)(我是新手Rails,我相信这个位有更好的选择,但它在我的机器上工作)
标签: ruby-on-rails sqlite