2014-03-25 52 views
0

我的應用程序中存在鎖定問題。有一個invoice,當timesheet被批准時會自動創建。發票需要由員工手動調整(增加VAT代碼,聯繫人數據等),因此他點擊了adapt按鈕。此時timesheet的狀態爲locked,因此不能再對時間表進行更改。用戶放棄後的鎖定記錄

這一切都正常,除了一個邊緣情況:員工點擊adapt按鈕,但對發票沒有做任何事情。例如。它會進入另一個屏幕,忘記發票等等。在這種情況下,時間表永遠保持在locked狀態,而它應該被解鎖。

我能做些什麼來解決這個問題?我目前的想法是創建一個rake任務,該任務以一定的時間間隔檢查locked狀態中的時間表,並在當前時間和時間表updated_at時間之間超過一小時時刪除locked狀態。

但也許有另一種策略可以更好地處理這種情況?

回答

0

您正在使用的目前的策略是一個悲觀的人,我建議你用一種樂觀的策略:

http://api.rubyonrails.org/classes/ActiveRecord/Locking/Optimistic.html

結果是,如果有人打開頁面,去吃午飯,並在此期間另一個用戶更新記錄,那麼當用戶從午餐回來並提交表單時將發生異常。

接下來的問題將是你如何處理異常?告訴用戶這已經處理了?向用戶顯示衝突,以便他們解決它們?

+0

感謝這一點,雖然我必須決定是否希望它是悲觀或樂觀鎖定... – John

1

您可以使用gmail的方法,例如(當您在完成電子郵件之前離開頁面時,他會詢問您是否確定要離開此頁面,如果是的話,他會丟棄該消息) 在您的情況下,您應該執行相同併發送一個ajax請求來解鎖記錄 在所有情況下,您將需要執行rake任務,以處理在電源關閉或瀏覽器崩潰時關閉的情況。但它會提供更好的便利性,以避免鎖定了整整一個小時的紀錄,除了在非常特殊的情況下,這樣這些