我在Ruby 1.8.7上使用Rails 3.2.2和mysql2 0.3.11(针对mysql 14.14服务器),有时created_at
或updated_at
值将是无效的DateTime,并且导致我的应用程序使用消息"Invalid date: 2022-03-00 00:00:00"
抛出异常。
我没有使用created_at
和updated_at
列明确创建,设置,阅读或执行任何操作。
通过mysql
客户端检查表,在大多数情况下,每个列中的值都是“0000-00-00 00:00:00
”,最终在Rails中为nil
。但是,有几行显示的值如“2022-03-00 00:00:00
”(尽管据我所知,它们都是不同的,但都是在2022年)。
有趣的是,我甚至无法从Rails运行.destroy()
,因为它无法创建对象。
可能为这些列设置无效日期?
编辑:所有表都会发生这种情况。这是我的schema.rb,以及其中一个表的所有迁移:https://gist.github.com/2930655
Edit2 :我自己解决了(请参阅下面的答案),但是如果你知道它是否是一个bug,你会很感激,如果是这样的话,那么这个bug是哪个包(ActiveRecord) ?)。
答案 0 :(得分:0)
事实证明这是因为我重载Time#to_s
,导致在SQL中发送无效值(它发送HH:MM:SS for DateTimes)。
MySQL和SQLite都无法以这种格式解析DateTimes,并导致垃圾值,但是,根据Ruby,SQLite的值永远不会“无效”,所以我在开发过程中从未注意到这一点。
现在,当我在另一列中保存一个具有Time或DateTime的对象,并将其设置为Time / DateTime对象时,它设置正确,所以我倾向于说这是一个bug。 / p>