生产环境中的 rails 变量

用户2582234

我正在开发一个 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方法。

维沙尔

当两个以上的用户尝试同时编辑时,您的解决方案会产生冲突,所以基本上我的想法是:

  1. 在您的模型中添加一个虚拟属性您edit_start_time不需要属性,endtime因为它可以随时直接获取Time.now

  2. edit_start_timeedit方法中设置值,例如:

      @model.edit_start_time = Time.now.utc #you can use any  
    
  3. update方法中直接计算编辑时间,如:

    total_update_time = Time.now.utc - @model.edit_start_time.utc
    

如果您不知道如何创建虚拟属性,那么 StackOverflow 和文档上有很多问题。我没有在这里解释如何做到这一点,因为它是不同的主题。

祝一切顺利

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章