繁体   English   中英

Rails-通过HTTP请求保存控制器实例变量数据

[英]Rails - save controller instance variable data across HTTP request

在我的项目中,用户正在上载需要阅读的文本文件。

文件,可以是任何大小,我正在使用的文件为1 MB,大约有1500行。 文件也可以更大。 因此,我考虑将文件处理并将数据保留在实例变量中,而不是将其全部放入db中。

但是实例变量在HTTP请求中不可用。 因此,我可以使用哪些选项来保留HTTP请求中的实例变量值 。不选择DB的另一个原因是,我不需要将数据持久化。 只要用户登录,就只需要在该时间段内显示数据。 用户注销后,我可以丢弃数据。

如果您需要更多信息,请告诉我。

正如@xyious建议的那样,我要避免在会话中存储大量数据,这不是一个好习惯。 但是,您可以执行以下操作:

  1. 设置系统范围的配置设置,该设置包含用于存储临时文件的路径,在这种情况下,临时文件是用户上传的文件
  2. 用户上载文件时,生成一个随机的文件名(也许使用SecureRandom.hex ),并将该文件存储在第1点提到的路径中
  3. 这样,即使在请求之间进行更改,也可以将随机文件名存储在用户会话中,但仍可以访问文件名
  4. 在每个请求上,每当需要处理数据时,都从用户会话中提取文件名并加入设置#1的路径,从文件系统中读取文件并根据需要进行处理
  5. 在登录/会话控制器上添加回调,这样当用户注销时,您可以查找文件名并在注销前将其删除,这样就不会保留未使用的文件

我建议不要这样做,但是您可以将数据存储在会话变量或cookie中。
为什么在用户登录时需要存储那么多数据? 是否可以只保存重要的位?

使用实例变量存储内容不是正确的方法,因为您对上传的文件大小没有限制,并且最终每次都会传递数据。

首先,确定大小限制,因为您希望用户收到文本文件,然后使用DB中的参考路径临时上传文件。 可以在需要时清除此文件,并使访问内容更简单。 为了进一步改善这一点,请启用缓存机制并为上传的文件设置缓存服务器。

如果您对此不满意,那么我可以想到的其他选择是使用已经建议的会话变量。 因此,此数据将在每个会话中保留,这符合您的要求。 您可以session[:file_Data] = "put parsed content here"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM