2013-04-28 74 views
0

我有一個Rails應用程序,其中一個特定的表單提交模型是一個兩步過程:在第一次提交時,rails控制器發出一個模態確認表單的呈現,從中可以調用更新操作或整個事件取消。Rails樂觀鎖定手動鎖定檢查:任何問題?

Rails樂觀鎖定似乎是處理過時更新的答案。

但是對於用戶體驗,如果Rails控制器可以將用戶A的模型版本與當前版本進行比較,而無需等到更新操作確定模型是否已過期(由於用戶B將模型更新爲同時提問),則可以向用戶A呈現另一類視圖,以指示他需要檢查更新後的模型。

是否有與人工檢查相關的任何問題或陷阱:lock_version現場控制器和比較它的PARAMS []的版本?是否有一些內置或「正式」的方式來執行此操作,或者控制器是否應該明確執行檢查?

回答

0

我覺得跟lock_version的主要問題是,它是一個一刀切(即你不能有不同的上下文不同的鎖),以及鎖定異常拋出過期的對象例外,這是不是特別漂亮的用戶。

賴恩·辛格已提出使用與驗證執行檢查相結合的的updated_at時間戳,然後使用軌道髒跟蹤顯示什麼改變用戶的另一種方法。您可以在Rails Cast中看到它:http://railscasts.com/episodes/59-optimistic-locking-revised

我一直在使用這種技術,並且很滿意它,雖然給出的示例並未涵蓋多個模型參與操作的更復雜情況,你需要確保模型關聯沒有改變等等。