2011-06-19 30 views
1

我想弄清楚一种方法来以最有效的方式在请求之间保存ActiveRecord对象。在rails上通过ruby请求持久化ActiveRecord对象

用例如下:用户提供一些参数并点击“显示预览”。当发生这种情况时,我正在做大量的后台计算来生成预览。在这个过程中创建了很多ActiveRecord对象。看完预览后,用户点击“提交”。我不想重新计算这里的所有内容,而只想保存先前请求创建的ActiveRecord对象。不能保证这两个请求总会发生(例如,用户可以在看到预览后退出,在这种情况下,我想从持久层中删除这些对象)。

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

谢谢。

回答

1

我不确定是否不保存在脏状态的对象将是最好的选择,因为你可以用某种控制属性(如状态或状态)来管理它。

这样做也会非常好,因为您可以一路验证数据,直到用户决定提交所有内容为止。我知道瑞安贝茨有一个截屏视频制作这种复杂的形式(http://railscasts.com/episodes/217-multistep-forms)。

希望它可以帮助。

2

您可以通过将其保存到数据库而不是将其他非真正的持久层添加到您的应用程序来节省大量不必要的工作。

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

0

数据是否可以超出分配给会话数据的空间,是因为您使用的是基于Cookie的会话?如果您需要更多空间,为什么不使用基于活动记录的会话?从基于cookie的会话中进行更改并不重要,实际上它是推荐的方式(为什么它不是默认的我不知道)

相关问题