【发布时间】:2015-11-04 11:57:35
【问题描述】:
我的控制器中有以下代码:
Item.transaction do
item = JobDistribution.lock(true).find(params[:id])
item.update_attributes(status: JobDistribution.statuses[:processing])
respond_to do |format|
format.json { render :json => "object processing", status: :success }
end
end
但是当我运行代码时出现错误:
尝试更新过时的对象:项目
我不明白为什么,我遵循了 Rails 文档。
【问题讨论】:
-
您从哪个文档中获得了这个?您正在尝试用旧数据覆盖新数据,而新数据被锁定。
-
您有
lock_version专栏吗?当您尝试运行交易时,它是最新的号码吗? -
@Robin 我确实有一个锁定版本列,这是失败的 sql 查询:
UPDATE "items" SET "status" = 1, "updated_at" = '2015-11-04 11:54:36.422768', "lock_version" = 1 WHERE ("items"."id" = 35 AND "items"."lock_version" = 0)
标签: ruby-on-rails activerecord pessimistic-locking