NoMethodError при запросе элемента datetime

0

Я пытаюсь запросить запись в datetime в моей базе данных с ruby ​​on rails. Это отлично работает в среде linux, но в моей среде Windows я получаю NoMethodError. При отладке я обнаружил, что ошибки возникают в строке 201 schema_definitions.rb при передаче строки datetime в течение времени

def fast_string_to_time(string)
            if string =~ Format::ISO_DATETIME
              microsec = ($7.to_f * 1_000_000).to_i <<====== This is line 201
              new_time $1.to_i, $2.to_i, $3.to_i, $4.to_i, $5.to_i, $6.to_i, microsec
            end
          end

При просмотре 7 долларов я получаю нуль, кажется, что $7 не инициализируется. Что такое $7 в этом контексте? Моя строка

2011-04-01 10:48:57

Это часть трассировки после того, как validate вызывается в записи массива, который должен содержать дату

activerecord (3.0.1) lib/active_record/connection_adapters/abstract/schema_definitions.rb:201:in `fast_string_to_time'
activerecord (3.0.1) lib/active_record/connection_adapters/abstract/schema_definitions.rb:139:in `string_to_time'
activerecord (3.0.1) lib/active_record/connection_adapters/abstract/schema_definitions.rb:78:in `type_cast'
activerecord (3.0.1) lib/active_record/attribute_methods/read.rb:83:in `read_attribute'
activerecord (3.0.1) lib/active_record/base.rb:1558:in `attributes'
activerecord (3.0.1) lib/active_record/base.rb:1558:in `each'
activerecord (3.0.1) lib/active_record/base.rb:1558:in `attributes'
activerecord (3.0.1) lib/active_record/attribute_methods.rb:57:in `attribute_method?'
activemodel (3.0.1) lib/active_model/attribute_methods.rb:394:in `match_attribute_method?'
activemodel (3.0.1) lib/active_model/attribute_methods.rb:393:in `each'
activemodel (3.0.1) lib/active_model/attribute_methods.rb:393:in `match_attribute_method?'
activemodel (3.0.1) lib/active_model/attribute_methods.rb:378:in `respond_to?'
activerecord (3.0.1) lib/active_record/attribute_methods.rb:52:in `respond_to?'
activerecord (3.0.1) lib/active_record/callbacks.rb:268:in `deprecated_callback_method'
activerecord (3.0.1) lib/active_record/validations.rb:57:in `valid?'
Теги:
datetime

1 ответ

2
Лучший ответ

Формат:: ISO_DATETIME является Regexp: /\ A (\ d {4}) - (\ d\d) - (\ d\d) (\ d\d): (\ d\d): (\ d\d) (.\D +)?\г/

7-й захват - это дробные секунды (например, ".123" ), который преобразуется в поплавок и затем преобразуется в микросекунды. В вашей строке $7 будет нулевой, но это не проблема, потому что nil.to_f равно 0.0. Попробуйте выполнить nil.to_f в консоли, чтобы убедиться, что вы получаете 0.0.

Вы уверены, что NoMethodError вызвана этой линией? Можете ли вы опубликовать обратную линию?

  • 0
    NoMethodError, кажется, происходит в whiny_nil.rb. Может быть проблема может быть в том, что он работает в производственном режиме? Во всяком случае, это было бы нехорошо, поскольку при тестировании произошла ошибка.
  • 0
    в NetBeans я пытался сделать nil.to_f в качестве переменной наблюдения, и он вернул nil, при выполнении nil.to_i 0 возвращается
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню