我正在尝试弄清楚 Ruby On Rails 中如何处理并发。
如何使代码段锁定数据库中的行,并在需要时强制回滚?
更具体地说,是否有一种方式可以强制某个代码段完全完成,如果未能完成则回滚? 我想在我的项目中添加事务历史记录,我不希望事务在保存历史记录之前提交,因此如果服务器在这两个操作(保存事务和保存历史记录)之间崩溃,数据库可能会进入非法状态。
我正在尝试弄清楚 Ruby On Rails 中如何处理并发。
如何使代码段锁定数据库中的行,并在需要时强制回滚?
更具体地说,是否有一种方式可以强制某个代码段完全完成,如果未能完成则回滚? 我想在我的项目中添加事务历史记录,我不希望事务在保存历史记录之前提交,因此如果服务器在这两个操作(保存事务和保存历史记录)之间崩溃,数据库可能会进入非法状态。
Account.transaction do
account = Account.find(account_id)
account.lock!
if account.balance >= 100
account.balance -= 100
account.save
end
end