2013-03-07 70 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