繁体   English   中英

在Rails中的跨请求中持久化ActiveRecord对象

[英]Persisting ActiveRecord objects across requests in ruby on rails

我试图找出一种方法,以最有效的方式在请求之间持久化ActiveRecord对象。

用例如下:用户提供一些参数,然后单击“显示预览”。 发生这种情况时,我会进行大量后台计算以生成预览。 在此过程中创建了许多ActiveRecord对象。 看到预览后,用户单击“提交”。 我不想在这里重新计算所有内容,而是只保存上一个请求创建的ActiveRecord对象。 无法保证这两个请求总是会发生(例如,用户可以在预览后退出,在这种情况下,我想从持久层中删除这些对象)。

是否有经过验证的有效方法来实现上述目标? 似乎应该是一种常见的情况。 而且我不能使用会话,因为数据可能超出分配给会话数据的空间。 而且,我宁愿不将这些对象保存到数据库中,因为用户在技术上还没有“提交”数据。 因此,我正在寻找的更多是内存持久层,可以在执行第二个请求时保证这些对象的存在。

谢谢。

您只需将其保存到数据库中,而不必将其他非持久层添加到您的应用程序中,则可以节省许多不必要的工作。

一种可能的方法:使用state属性来告知您的记录处于什么状态(例如,“草稿”,“已提交”)。 然后运行垃圾收集器以删除未在特定时间范围内提交的草稿(及其附属记录)。

我不确定是否不将对象保存为脏状态是最好的选择,因为您可以使用状态或状态之类的控制属性来管理该对象。

有了它也将非常有用,因为您可以一路验证数据,而不必等到用户决定提交所有内容后再执行。 我知道Ryan Bates进行了截屏,以创建这种复杂的表格( http://railscasts.com/episodes/217-multistep-forms )。

希望它能有所帮助。

使用基于cookie的会话,数据可能超过分配给会话数据的空间的原因吗? 如果需要更多空间,为什么不使用基于活动记录的会话? 从基于cookie的会话中进行更改很简单,实际上是推荐的方式(所以为什么它不是我不知道的默认设置)

暂无
暂无

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

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