麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Ruby > 正文

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

2020-10-29 19:42:09
字體:
來源:轉載
供稿:網友

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 96视频在线免费观看 | 成人国产精品一区二区毛片在线 | 欧美区在线 | 色婷婷av一区二区三区久久 | 国产精品视频六区 | 深夜视频在线 | 精品国产一区二区亚洲人成毛片 | 中文字幕22页 | 日本中文字幕高清 | 欧美视频不卡 | 懂色av懂色aⅴ精彩av | 成人在线观看小视频 | xxxxhdvideosex| 亚洲国产馆 | 精品国产专区 | 中文字幕一区久久 | 99视频在线观看视频 | 91av资源在线 | 亚州成人在线观看 | 爱逼爱操综合网 | 欧美成人精品一区二区男人小说 | 欧美在线一级 | 国产精品视频在 | 精品成人av一区二区三区 | 主人在调教室性调教女仆游戏 | 国产高潮好爽受不了了夜色 | 中文字幕精品在线播放 | av视屏| 黄色网页在线观看 | 亚洲午夜精选 | 久久精品性视频 | 精精国产xxxx视频在线野外 | 99视频有精品视频高清 | 十级毛片| 91成人久久 | 国产 一区| 一级黄色免费观看 | 久久久在线 | 国产成人精品免高潮在线观看 | 久久华人| hd性videos意大利复古 |