1

我是新手ActiveRecord,正在尝试做一些相当简单的事情。我搜索了互联网,无法提出解决方案。

在 mysql 中,我有一个类型为DATETIME. 该表中已经包含许多值。此列的一些示例值为NULL0000-00-00 00:00:002009-04-30 10:30:22

使用railsandActiveRecord我可以从数据库中检索记录。但是,当我要求一个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

4

1 回答 1

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?

希望有帮助。

于 2013-03-07T23:54:09.680 回答