0
假设我有ModelA
和ModelB
。当我将ModelA
的实例保存到数据库时,它还会创建/保存ModelB
的实例。在分贝我最终与UTC的created_at
显示完全相同。例如:Rails日期相等不适用于where子句
puts ModelA.first.created_at # Wed, 31 Aug 2011 22:49:28 UTC +00:00
puts ModelB.first.created_at # Wed, 31 Aug 2011 22:49:28 UTC +00:00
所以我期望像下面这样的查询返回匹配的记录(但事实并非如此)
# model_instance is instance of SomeModel
ModelA.where(created_at:model_b_instance.created_at) # returns []
但是这样的事情,使用to_s(:DB)不工作
ModelA.each do |m|
if m.created_at.to_s(:db) == model_b_instance.created_at.to_s(:db)
... # found matches here
end
end
有人可以解释我在做什么错吗?我希望能够编写像ModelA.where(created_at: ...)
这样的查询,但是我目前不得不迭代并匹配to_s(:db)
。
两件事情要尝试:1)看看什么created_at值是在分贝 - 也许有什么东西像时区(可能是推断一个时区的一个,但不是其他)2)看看rails会记录你的'ModelA.where'调用正在生成的实际sql查询 - 可能它正在做某种意想不到的事情。 –
@John你的#1大部分是正确的。虽然'puts ... created_at'显示为同样的东西,但数据库中的实际值与毫秒类似。如果您想将您的评论发布为答案,我会将其标记为已接受。 – Dty
没有得到:ModelA.where(created_at:model_b_instance.created_at)#returns []是ModelA.created_at == ModelB.created_at也许与:连接 –