我是 ActiveRecord
的新手,正在尝试做一些相当简单的事情。我在互联网上进行了搜索,但未能找到解决方案。
在 mysql 中,我有一个类型为 DATETIME
的表列。该表中已经有很多值。此列的一些示例值是 NULL
、0000-00-00 00:00:00
和 2009-04-30 10:30:22
使用 rails
和 ActiveRecord
我可以从数据库中检索记录。但是,当我请求 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
?
最佳答案
Rails 似乎没有办法将日期强制转换为非零值。
没有办法解决这个问题的事实表明您可能正在以非最佳方式做某事,因此我的第一个建议是只迁移所有 0000-00-00 00:00:如果可以,将 00
值设置为 nil
。
如果那不是一个选项。您可以通过 sql 条件查找是否有任何一条记录具有 0000-00-00 00:00:00
,如下所示:
Post.where("date_field = '0000-00-00 00:00:00' && id = ?", post.id).exists?
希望对您有所帮助。
关于mysql - mysql 中的 ActiveRecord DATETIME 列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15283653/