计算时间

时间:2016-06-15 23:05:53

标签: ruby ruby-on-rails-4

我正在尝试在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 

2 个答案:

答案 0 :(得分:3)

我认为您的根本问题是您假设您的实例变量(@start_time@stop_time)在请求中保持不变。他们没有。每当您点击其中一个端点时,您就会处理一个全新的控制器实例,因此,即使您之前已拨过#create#destroy,当您致电{ {1}} #show@start_time都是@stop_time

如果您确实希望数据在请求之间保持不变,则需要某种持久性机制,即数据库或键值存储。实例变量仅在单个请求/响应周期的持续时间内保存在内存中。

答案 1 :(得分:1)

调用-的唯一位置是total_time方法。因为它说“NoMethod - for nil class”意味着减号之前的变量是未定义的。所以这里是@stop_time变量。

看起来@stop_time仅在您致电create时定义。如果您希望代码有效,则必须先致电createdestroy,然后再致电total_time

我敢打赌,你正在按顺序运行它们 - 在其他人之前调用total_time - 这就是你收到错误的原因。