2016-06-15 13 views
0

私は時間を計算するRoR上にアプリケーションを作成しようとしています。計算時間

開始ボタンを押すとTime.nowがプルされ、停止ボタンを押すと再びTime.nowがプルされ、その間の時間が計算されます。その後、与えられた秒をto_iで整数に変換し、分単位の時間を分単位で計算します。分:秒

エラーが発生した場合でもエラーは発生します。

現在の順位は、 "未定義のメソッド` - 」nilのために:NilClass" である

def create 
    @start_time = Time.now 
end 

def destroy 
    @stop_time = Time.now 
end 

def show 
    @total_time = hours_worked(total_time) 
end 

private 

def total_time 
    total_time = @stop_time - @start_time 
    return total_time.to_i 
end 

def time_worked(seconds_worked) 
    hours = seconds_worked/(60 * 60) 
    minutes = (seconds_worked/60) % 60 
    seconds = seconds_worked % 60 
    return "#{hours} + “:” + #{minutes} + “:” + #{seconds}" 
end 
+0

エラーのように 'nil'で' -'メソッドを呼び出しています。 '-'を呼んでいる唯一の場所は' total_time'メソッドであるので、 '@ stop_time'は' nil'です。 –

+0

'hours_worked'の名前を' time_worked'に変更することを考えます。 – lwassink

答えて

1

-があなたのtotal_time方法であると呼ばれている唯一の場所。 "NoMethod - for nil class"と言うので、マイナス記号の前の変数は未定義です。ここには、@stop_timeという変数があります。

createに電話すると@stop_timeが定義されているようです。コードを機能させたい場合は、total_timeを呼び出す前にcreatedestroyの両方を呼び出す必要があります。

他のものの前にtotal_timeと呼んでいて、あなたがそれらを使い果たしていると思います。そのため、エラーが発生しています。

3

私はあなたのインスタンス変数(@start_time@stop_time)が要求を超えて存続すると仮定しているという根本的な問題があると思います。彼らはしません。これらのエンドポイントの1つを押すたびにコントローラの全く新しいインスタンスが処理されるため、以前に#create#destroyを呼び出しても、#showを呼び出すと@start_time@stop_timeの両方がnilとなります。

データが要求を超えて保持されるようにするには、データベースまたはキー値ストアなどの永続的なメカニズムが必要です。インスタンス変数は、単一の要求/応答サイクルの間だけメモリに保持されます。