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也許與:連接 –