Я сталкивался с той же проблемой.И я обнаружил, что это было вызвано плагином validates_date_time , который переопределяет метод ActiveRecord :: ConnectionAdapters :: Column.string_to_time .Этот метод не может проанализировать строку времени без временной части, например «2010-01-01», и возвращает нулевое значение, поскольку предполагает, что должна быть временная часть (например, «2010-01-01 00:00:00»)
Однако в адаптере JDBC JRuby часть времени отбрасывается, если все нули, см. Функцию timestampToRuby :
protected IRubyObject timestampToRuby(Ruby runtime, ResultSet resultSet, Timestamp time)
throws SQLException {
if (time == null && resultSet.wasNull()) return runtime.getNil();
String str = time.toString();
if (str.endsWith(" 00:00:00.0")) {
str = str.substring(0, str.length() - (" 00:00:00.0".length()));
}
if (str.endsWith(".0")) {
str = str.substring(0, str.length() - (".0".length()));
}
return RubyString.newUnicodeString(runtime, str);
}
Именно поэтому ActiveRecord вернул nil для этого атрибута.
Чтобы исправить это, вы можете исправить вышеуказанную проблему в плагине validates_date_time или заменить ее другим валидатором даты-времени.