Ruby 计算时间

Ruby 计算时间,ruby,ruby-on-rails-4,Ruby,Ruby On Rails 4,我正在尝试在RoR上创建一个计算时间的应用程序 当你按下“开始”按钮时,它将拉动时间。现在,然后,当你按下“停止”按钮时,它将拉动时间。现在,再次,然后计算两者之间的时间量。然后它会将给定的秒数转换为和整数via to_i,然后将秒数整数计算为小时:分钟:秒 然而,我的代码出现了一些问题,它不断地抛出一个又一个错误 当前顺序为“nil:NilClass的未定义方法“-” 调用-的唯一位置是在总时间方法中。因为它说“NoMethod-for nil class”,这意味着减号之前的变量是未定义的。

我正在尝试在RoR上创建一个计算时间的应用程序

当你按下“开始”按钮时,它将拉动时间。现在,然后,当你按下“停止”按钮时,它将拉动时间。现在,再次,然后计算两者之间的时间量。然后它会将给定的秒数转换为和整数via to_i,然后将秒数整数计算为小时:分钟:秒

然而,我的代码出现了一些问题,它不断地抛出一个又一个错误

当前顺序为“nil:NilClass的未定义方法“-”


调用
-
的唯一位置是在
总时间
方法中。因为它说“NoMethod-for nil class”,这意味着减号之前的变量是未定义的。这里,这是
@stop\u time
变量

看起来只有在调用
create
时才能定义
@stop\u time
。如果您想让代码正常工作,在调用
total\u time
之前,必须同时调用
create
destroy


我敢打赌,您正在按顺序运行它们—比其他人先调用
total_time
—这就是您出错的原因

调用
-
的唯一位置是在
总时间
方法中。因为它说“NoMethod-for nil class”,这意味着减号之前的变量是未定义的。这里,这是
@stop\u time
变量

看起来只有在调用
create
时才能定义
@stop\u time
。如果您想让代码正常工作,在调用
total\u time
之前,必须同时调用
create
destroy


我敢打赌,您正在按顺序运行它们—比其他人先调用
total_time
—这就是您出错的原因

我认为您的根本问题在于,您假设实例变量(
@start\u time
@stop\u time
)在请求之间持续存在。他们没有。每次点击其中一个端点时,您都在处理一个全新的控制器实例,因此,即使您之前调用了
\create
\destroy
,当您调用
\show
时,
@start\u time
@stop\u time
都是


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

我认为您的根本问题在于您假设实例变量(
@start\u time
@stop\u time
)在请求之间持续存在。他们没有。每次点击其中一个端点时,您都在处理一个全新的控制器实例,因此,即使您之前调用了
\create
\destroy
,当您调用
\show
时,
@start\u time
@stop\u time
都是


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

您正在调用
nil
上的
-
方法,如错误所示。由于您调用的唯一的地方<代码> ->代码>在<代码> TooTythTime/Cux>方法中,因此遵循<代码> @ StudioTime/<代码>是代码> NIL。我将考虑重命名<代码> HulsSyWorks到<代码> Time-Works。由于您调用的唯一的地方<代码> ->代码>在<代码> TooTythTime/Cux>方法中,因此遵循<>代码> @ StaseTime/<代码>是代码> nIL/COD>。我会考虑重命名<代码> HulsSyWorks<代码> > <代码> Time-Works。
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