2011-08-31 58 views
0

假設我有ModelAModelB。當我將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)

+0

兩件事情要嘗試:1)看看什麼created_at值是在分貝 - 也許有什麼東西像時區(可能是推斷一個時區的一個,但不是其他)2)看看rails會記錄你的'ModelA.where'調用正在生成的實際sql查詢 - 可能它正在做某種意想不到的事情。 –

+0

@John你的#1大部分是正確的。雖然'puts ... created_at'顯示爲同樣的東西,但數據庫中的實際值與毫秒類似。如果您想將您的評論發佈爲答案,我會將其標記爲已接受。 – Dty

+0

沒有得到:ModelA.where(created_at:model_b_instance.created_at)#returns []是ModelA.created_at == ModelB.created_at也許與:連接 –

回答

0

兩件事情嘗試:

  1. 看到什麼created_at值在DB - 也許有什麼東西掉一樣的時區(也許Rails是推斷爲一個時區,而不是其他)
  2. 在rails日誌中查看您的ModelA.where調用正在生成的實際sql查詢 - 也許它正在做某種意想不到的事情。