国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Rails應用程序中同時修改操作沖突問題的解決方案

2019-10-26 19:25:17
字體:
來源:轉載
供稿:網友

Rails 應用程序中操作沖突是一個常見問題,Rails 提供了簡單有效的解決方法。

舉一個實際的例子:我們的系統里有一個商店模塊,商店中重要的一塊是對產品信息的管理,比如運營人員常常會編輯產品的信息,包括產品標題,營銷口號和價格等等。因為修改十分頻繁,碰巧同時編輯提交修改的話,就會偶爾遇到修改丟失的問題,運營人員 A 修改產品標題,運營人員 B 修改價格,A 和 B 提交修改都提示修改成功,但是結果上只是 A 的修改結果生效,B 的修改被 A 的修改沖掉了。

仔細研究原因,發現是因為修改功能缺少操作沖突機制,而修改操作同時發生導致了問題。 如下圖所示,A 和 B 同時從數據庫中查詢數據,在 web 頁面中修改同樣的數據,提交保存時是以 web 頁面中提交的數據為準,從而導致 A 的修改把 B 的修改給覆蓋了。

Rails 的 樂觀鎖Optimistic Locking 是解決這個問題的有力工具,它的原理是在數據庫表中增加一個字段(默認是 lock_version,可配置)記錄數據的版本號,每個提交的修改都帶上這個版本號,在真正 update 修改數據之前,先判斷提交的 lock_version 數據和數據庫中的是否一致,如果不一致,則認為發生數據沖突,將拋出 ActiveRecord::StaleObjectError 異常,這樣程序就可以捕獲這個異常,提醒用戶發生了沖突,由用戶去協調解決沖突。

相關示例代碼如下所示:
代碼如下:
# migration: add lock_version to products
add_column :products, :lock_version, :integer, defalut: 0

# update product with StaleObjectError checking
begin
  product.update(params[:product])
rescue ActiveRecord::StaleObjectError
  render 'confilct'
end

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 塘沽区| 南乐县| 宁德市| 根河市| 县级市| 额尔古纳市| 鄢陵县| 芜湖市| 赤水市| 秦皇岛市| 哈巴河县| 万安县| 大理市| 永清县| 连城县| 冀州市| 高雄市| 内黄县| 衡阳市| 晋州市| 北碚区| 扎鲁特旗| 张掖市| 广南县| 湘潭县| 丹阳市| 炎陵县| 延边| 安义县| 湘乡市| 长海县| 香港| 增城市| 定兴县| 望奎县| 合山市| 潞城市| 三亚市| 花莲市| 台江县| 石家庄市|