2010-02-05 20 views
6

Tengo un controlador:obtiene un error de método privado en Ruby on Rails

class StatsController < ApplicationController 

    require 'time' 

    def index 
     @started = "Thu Feb 04 16:12:09 UTC 2010" 
     @finished = "Thu Feb 04 16:13:44 UTC 2010" 
     @duration_time = stats_duration(@started, @finished) 
    end 

    private 
    def stats_duration(started, finished) 
    time_taken = distance_of_time_in_words(Time.parse(started), Time.parse(finished)) 
    time_taken 
    end 

end 

Se necesita en un tiempo start y end y calcula la duración entre los tiempos.

Cuando ejecuto esto me sale el siguiente error:

private method `gsub!' called for Thu Feb 04 16:12:09 UTC 2010:Time

Por qué sucede esto?

+1

Está llamando a pipeline_duration, pero nos muestra el método stats_duration. Ayudaría saber qué línea causó la excepción, y si esa línea no está en su código, qué línea de su código se ha ejecutado recientemente. –

+0

Esto es literalmente todo lo que obtengo de la consola. Supongo que es la llamada a Time.parse. – RailsSon

+0

En algún lugar habrá un seguimiento de la pila. Quizás en un archivo de registro en alguna parte. Necesitaremos eso. –

Respuesta

12

método privado gsub! llamado cuando usa Time.parse generalmente significa que ha llamado a parse con un objeto Time en lugar de String, así que parece que su código está tratando de analizar la hora dos veces.

p. Ej.

>> t = Time.now 
=> Fri Feb 05 13:12:17 +0000 2010 
>> Time.parse(t) 
NoMethodError: private method `gsub!' called for Fri Feb 05 13:12:17 +0000 2010:Time 
     from c:/ruby/lib/ruby/1.8/date/format.rb:965:in `_parse' 
     from c:/ruby/lib/ruby/1.8/time.rb:240:in `parse' 
     from (irb):6 
+0

Gracias por hacer que la cadena de tiempos parezca funcionar, ¡gracias! – RailsSon