• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >ruby > Rails应用程序中同时修改操作冲突问题的解决方案

Rails应用程序中同时修改操作冲突问题的解决方案

作者:junjie 字体:[增加 减小] 来源:互联网

junjie 通过本文主要向大家介绍了rails,ruby on rails,rails是什么意思,ruby on rails教程,railsinstaller等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

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
</div>

</div>

您可能想查找下面的文章:

  • Rails bundle命令安装mysql gem包出错的解决方法
  • win7安装ruby on rails开发环境
  • 简单对比分析Ruby on Rails 和 Laravel
  • 在 Ubuntu 12.04 Server 上安装部署 Ruby on Rails 应用
  • 快速正确的安装 Ruby, Rails 运行环境
  • Windows下Ruby on Rails开发环境安装配置图文教程
  • Ruby On Rails中如何避免N+1问题
  • 艰难完成 nginx + puma 部署 rails 4的详细记录
  • 学习Ruby你需要了解的相关知识(rvm, gem, bundle, rake, rails等)
  • 浅谈Rails 4 中Strong Parameters机制

相关文章

  • Ruby 之 class 中的 private、 protected、public
  • ruby实现github第三方认证
  • Ruby中XML格式数据处理库REXML的使用方法指南
  • 以MVC的思维方式来理解Ruby on Rails框架的设计结构
  • 使用Ruby on Rails和PostgreSQL自动生成UUID的教程
  • Linux系统上配置Nginx+Ruby on Rails+MySQL超攻略
  • 冒泡排序算法及Ruby版的简单实现
  • Ruby实现发送邮件的两个方法
  • 利用Ruby的SOAP4R编写SOAP服务器的教程
  • Ruby中的数组和散列表的使用详解

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • Linux系统上配置Nginx+Ruby on Rails+MySQL超攻略
    • Ruby rails 页面跳转(render和redirect_to)
    • 详解Ruby语言中的注释用法与中文编码问题
    • Ruby中case表达式详解
    • 实例解析Ruby中的数值类型以及常量
    • 举例初步讲解Ruby中的正则表达式
    • Ruby on Rails实现最基本的用户注册和登录功能的教程
    • Ruby中使用多线程队列(Queue)实现下载博客文章保存到本地文件
    • win7安装ruby on rails开发环境
    • Ruby中的Range对象学习笔记

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有