濮阳杆衣贸易有限公司

主頁 > 知識庫 > Rails應(yīng)用程序中同時修改操作沖突問題的解決方案

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

熱門標(biāo)簽:征服者企業(yè)地圖標(biāo)注 外呼線路從哪里出來的 淮安自動外呼系統(tǒng)供應(yīng)商 巫師3地圖標(biāo)注魔力之所 中牟外呼系統(tǒng)違法嗎 天津外呼系統(tǒng)怎么收費 AI電銷機器人 線路 漯河電銷 柯城手機地圖如何做地圖標(biāo)注

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

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

仔細(xì)研究原因,發(fā)現(xiàn)是因為修改功能缺少操作沖突機制,而修改操作同時發(fā)生導(dǎo)致了問題。 如下圖所示,A 和 B 同時從數(shù)據(jù)庫中查詢數(shù)據(jù),在 web 頁面中修改同樣的數(shù)據(jù),提交保存時是以 web 頁面中提交的數(shù)據(jù)為準(zhǔn),從而導(dǎo)致 A 的修改把 B 的修改給覆蓋了。

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

相關(guān)示例代碼如下所示:

復(fù)制代碼 代碼如下:

# 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

標(biāo)簽:大慶 棗莊 西雙版納 內(nèi)江 河池 南昌 克拉瑪依 甘孜

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Rails應(yīng)用程序中同時修改操作沖突問題的解決方案》,本文關(guān)鍵詞  Rails,應(yīng)用程序,中,同時,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Rails應(yīng)用程序中同時修改操作沖突問題的解決方案》相關(guān)的同類信息!
  • 本頁收集關(guān)于Rails應(yīng)用程序中同時修改操作沖突問題的解決方案的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    漳浦县| 五峰| 兴文县| 长子县| 汾阳市| 马公市| 团风县| 上饶县| 襄汾县| 司法| 温宿县| 丰顺县| 舟曲县| 黄石市| 邮箱| 宁城县| 桐庐县| 铅山县| 奉贤区| 河源市| 阿坝县| 喜德县| 长顺县| 丁青县| 巴青县| 黄平县| 蕲春县| 宁波市| 汾阳市| 南京市| 原平市| 南部县| 徐州市| 邯郸县| 定安县| 山东| 章丘市| 兴宁市| 新津县| 青海省| 射洪县|