mysql - NoMethodError når du anmoder om datetime element

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forsøger at anmode om en datetime-post i min database med rubin på skinner. Dette virker fint i et Linux-miljø, men i mit Windows-miljø får jeg en NoMethodError. Ved fejlfinding fandt jeg ud af, at fejlene opstår ved linje 201 i skema\_definitions.rb, når du kaster datetime-strengen til en tid


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


Når jeg ser $ 7 får jeg nul, synes at $ 7 ikke initialiseres. Hvad er $ 7 i denne sammenhæng? Min streng er


2011-04-01 10:48:57


Dette er den del af sporet, der efter validering kaldes en indtastning af en matrix, der skal indeholde datoen


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?'

Bedste reference


Format :: ISO\_DATETIME er et Regexp:
/\ D \ d) (\ d \ d): (\ d \ d): (\ d \ d) (. \ D +)? \ z/


Den syvende optagelse er de fraktionerede sekunder (fx '.123'), som konverteres til en float og derefter konverteres til mikrosekunder. I din streng vil $ 7 være nul, men det er ikke et problem, fordi nil.to\_f er kun 0,0.
Prøv at udføre nil.to\_f i en konsol for at sikre, at du får 0,0.


Er du sikker på, at NoMethodError er forårsaget af den linje? Kan du sende backtrace?