2013-09-11 80 views
0

我在想,是否有可能多個用戶提交表單導致數據被覆蓋。 這是行動的時間順序流:Rails表單提交競賽條件?

1. User 1 clicks on Edit, rails render the page that has <form> and has value {A: 1, B: 2} 
2. User 2 clicks on Edit, rails render another page that has <form> and has value {A: 1, B: 2} 
3. User 1 updates value A to 5 and clicks on Submit, passing to server {A: 5, B: 2} 
4. Server updates to database to {A: 5, B: 2} 
5. User 2 updates value B to 10 and clicks on Submit, passing to server {A: 1, B: 10} 
6. Server updates to database to {A: 1, B: 10} 

由於用戶2瀏覽器有舊數據。當B點擊提交時,字段A被過濾爲1.用戶1的更新被覆蓋。

如何在rails中解決這個問題?

回答

1

如果你正在使用的軌道,你應該已經在csrf_meta_tags這創造了一個獨特的鑰匙,讓你知道,形式提交的,併爲每個用戶

1

如果他們要在同一記錄不同,你肯定是暴露除非您查看記錄,否則由於比賽而導致數據丟失。您需要檢查記錄以確保在更新過程中它沒有發生變化。

如果您正在生成新記錄,那麼您應該很可能依賴數據庫爲其生成唯一的記錄和ID /密鑰。