2015-11-04 112 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在兩者之間感到困惑 - 選擇一個或另一個。