试图弄清楚如何在Ruby On Rails中处理并发性。
如何获取一段代码来锁定数据库中的行并在需要时强制回滚?
更具体地说,有没有办法强制某段代码完全完成,如果没有回滚?我希望在我的项目中为事务添加历史记录而我不想要提交的事务没有保存历史记录,因此如果服务器介于两个操作之间(保存事务并保存历史记录),数据库可能会进入非法状态。
答案 0 :(得分:5)
您想查看ActiveRecord Transactions和Pessimistic Locking。
Account.transaction do
account = Account.find(account_id)
account.lock!
if account.balance >= 100
account.balance -= 100
account.save
end
end
答案 1 :(得分:1)