我在测试验证时遇到了这种特质。迁移定义如下:
create_table :time_windows do |t|
t.datetime :window_begin, :null => true
t.datetime :window_end, :null => true
end
在 irb
>> t = TimeWindow.new({:window_begin => Time.now, :window_end => "not a time"})
=> #<TimeWindow id: nil, window_begin: "2010-07-29 15:54:07", window_end: nil>
我的问题是,为什么 ActiveRecord 将“not a time”解释为 nil 而不仅仅是设置 :window_end = “not a time”?当您将 :window_end 设置为 int 时,也会发生相同的转换为 nil。
这对我来说是个问题的原因是,如果有人试图在 :window_end (或 :window_start )列中保存一个非时间值,我希望抛出一个错误,但这里不会出现这种情况。
谢谢。