2013-03-07 74 views
1

我是ActiveRecord的新手,試圖做一些相當簡單的事情。我搜索了互聯網,無法提出解決方案。ActiveRecord mysql中的DATETIME列值

在mysql中,我有一個類型爲DATETIME的表格列。這張表已經有很多值了。此列一些示例值NULL0000-00-00 00:00:002009-04-30 10:30:22

使用railsActiveRecord我可以從數據庫中檢索的記錄。但是,當我詢問DATETIME字段值爲0000-00-00 00:00:00的值時,我得到的結果是nil對象。

數據庫值NULL也返回nil對象,這是有道理的。

數據庫值2009-04-30 10:30:22返回Thu, 30 Apr 2009 10:30:22 UTC +00:00這也是有意義的。

我認爲使用_before_type_cast可能會有所幫助,但事實並非如此。

如何確定返回的對象是否具有數據庫值0000-00-00 00:00:00

回答

3

似乎沒有辦法內置到Rails中,以避免將該日期轉換爲非零。

事實上,沒有辦法解決這個問題的跡象表明,您可能以非最佳方式做了某些事情,所以我的第一個建議是,如果可以,請將所有0000-00-00 00:00:00的值遷移到nil

如果這不是一個選項。你可以找到任何一個記錄是否具有0000-00-00 00:00:00通過SQL條件是這樣的:

Post.where("date_field = '0000-00-00 00:00:00' && id = ?", post.id).exists? 

希望有所幫助。

+0

我同意這可能是非最佳的。但是,我正在使用舊版PHP應用程序,並且'0000-00-00 00:00:00'值與'NULL'值具有重要意義。我很驚訝,沒有更好的鐵路解決方案。儘管如此,你確實得到了我的投票權。謝謝! – 2013-03-08 03:54:03