我正在开发一个 Rails 应用程序。大多数部分工作正常,但是当我尝试计算用户用于编辑和提交一个表单的时间时,我遇到了一个奇怪的问题。
我认为按照以下顺序进行操作会很好: 1. 在控制器的“编辑”方法中,记录用户开始查看表单的时间。2.在“更新”方法中,记录提交时间,然后进行数学计算并获得用户在表单上花费的时间。
class Test
@@start_time = 0
@@end_time = 0
def edit
@@start_time = Time.now
end
def update
@@end_time = Time.now
time_used = @@end_time - @@start_time
puts time_used.to_i
end
end
上面的代码在我自己开发的计算机上运行时实际上运行良好,输出是我所期望的。但是当我将代码上传到生产环境(多核CPU)时,有时输出是正确的,有时则不是。我调试了代码,发现在某些情况下,提交表单时@@start_time 设置为0。我很困惑发生了什么,也许我只是误用了 @@ 作为变量。请帮助我,任何想法将不胜感激,谢谢。
编辑:问题是通过向模型添加虚拟属性来解决的,如 Vishal 所暗示的那样。另外,我在提交表单中添加了一个隐藏字段,在强参数部分添加了相应的参数,允许它从edit传递到update方法。
当两个以上的用户尝试同时编辑时,您的解决方案会产生冲突,所以基本上我的想法是:
在您的模型中添加一个虚拟属性您edit_start_time
不需要属性,endtime
因为它可以随时直接获取Time.now
。
edit_start_time
在edit
方法中设置值,例如:
@model.edit_start_time = Time.now.utc #you can use any
在update
方法中直接计算编辑时间,如:
total_update_time = Time.now.utc - @model.edit_start_time.utc
如果您不知道如何创建虚拟属性,那么 StackOverflow 和文档上有很多问题。我没有在这里解释如何做到这一点,因为它是不同的主题。
祝一切顺利
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句