2011-06-19 99 views
1

我想弄清楚一種方法來以最有效的方式在請求之間保存ActiveRecord對象。在rails上通過ruby請求持久化ActiveRecord對象

用例如下:用戶提供一些參數並點擊「顯示預覽」。當發生這種情況時,我正在做大量的後臺計算來生成預覽。在這個過程中創建了很多ActiveRecord對象。看完預覽後,用戶點擊「提交」。我不想重新計算這裏的所有內容,而只想保存先前請求創建的ActiveRecord對象。不能保證這兩個請求總會發生(例如,用戶可以在看到預覽後退出,在這種情況下,我想從持久層中刪除這些對象)。

有沒有經過驗證的有效方法來達到上述目的?似乎它應該是一種常見的情況。而且我無法使用會話,因爲數據可能會超出分配給會話數據的空間。此外,我寧願不將這些對象保存到數據庫中,因爲用戶沒有從技術上「提交」數據。所以我所尋找的更多的是內存中的持久層,它可以在執行第二個請求時保證這些對象的存在。

謝謝。

回答

1

我不確定是否不保存在髒狀態的對象將是最好的選擇,因爲你可以用某種控制屬性(如狀態或狀態)來管理它。

這樣做也會非常好,因爲您可以一路驗證數據,直到用戶決定提交所有內容爲止。我知道瑞安貝茨有一個截屏視頻製作這種複雜的形式(http://railscasts.com/episodes/217-multistep-forms)。

希望它可以幫助。

2

您可以通過將其保存到數據庫而不是將其他非真正的持久層添加到您的應用程序來節省大量不必要的工作。

一種可能的方法:使用state屬性來告知您的記錄處於何種狀態(例如「草稿」,「提交」)。然後讓垃圾收集器運行刪除在特定時間段內未提交的草稿(及其相關記錄)。

0

數據是否可以超出分配給會話數據的空間,是因爲您使用的是基於Cookie的會話?如果您需要更多空間,爲什麼不使用基於活動記錄的會話?從基於cookie的會話中進行更改並不重要,實際上它是推薦的方式(爲什麼它不是默認的我不知道)

相關問題