2015-11-04 65 views
1

我在我的控制器下面的代码:悲观锁失败

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 

但是当我跑,我发现了错误代码:

Attempted to update a stale object: Item

我不明白为什么,我遵循rails文档。

+0

你有哪些文件?您正在尝试用新的数据覆盖新数据,而新的数据被锁定。 – Robin

+0

@Robin http://api.rubyonrails.org/classes/ActiveRecord/Locking/Pessimistic.html – bl0b

+0

你有'lock_version'列吗?当你尝试运行你的交易时,它是最新的数字吗? – Robin

回答

3

lock_version是乐观锁定,您还使用悲观锁定从lock链接你的find。 Rails在两者之间感到困惑 - 选择一个或另一个。