[英]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.