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