Jruby rails, не может прочитать определенное значение DateTime из базы данных mysql - PullRequest
0 голосов
/ 29 декабря 2010

Я использую rails 2.3.2, jruby 1.5.1, mysql 5.1 и activerecord-jdbcmysql-adapter-1.1.0.gem. Проблема в том, что: если в таблице базы данных есть столбец datetime и столбецоказалось, что имеет значение типа «xxxx-xx-xx 00:00:00», это значение не может быть прочитано с рельсов.

Вот вывод консоли: Снимок экрана сеанса консоли

Я установил s.from на '2010-1-1 08:00:00', и я нахожусь в часовом поясе +8: 00, поэтому в базе данных это utc, а значение '2010-1-1 00:00:00 '.Это значение не может быть считано из базы данных, но оно есть в базе данных.

Если строка даты и времени не заканчивается на «00: 00: 00» в базе данных, никаких проблем не возникает.Я полагаю, что это ошибка в геме activerecord-jdbcmysql-adapter, но я не могу найти способ исправить это, какой-либо совет?

Ответы [ 2 ]

1 голос
/ 20 сентября 2011

Я сталкивался с той же проблемой.И я обнаружил, что это было вызвано плагином 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 или заменить ее другим валидатором даты-времени.

1 голос
/ 30 декабря 2010

Это может быть ошибка в activerecord-jdbc. Можете ли вы сформулировать свой вопрос в форме теста? Или подайте ошибку в JIRA или Github ?

...