【发布时间】:2015-04-28 01:05:39
【问题描述】:
我正在学习 rails,并阅读有关乐观锁的信息。我已将integer 类型的lock_version 列添加到我的articles 表中。
但是现在每当我尝试第一次更新记录时,我都会收到StaleObjectError 异常。
这是我的迁移:
class AddLockVersionToArticle < ActiveRecord::Migration
def change
add_column :articles, :lock_version, :integer
end
end
当我尝试通过 rails 控制台更新文章时:
article = Article.first
=> #<Article id: 1, title: "Ccccc", text: "dfdsfsdfsdf", created_at: "2015-02-20 21:58:45", updated_at: "2015-02-25 20:03:12", lock_version: 0>
我愿意:
article.title = "new title"
article.save
我明白了:
(0.3ms) begin transaction
(0.3ms) UPDATE "articles" SET "title" = 'dwdwd', "updated_at" = '2015-02-25 20:40:36.537876', "lock_version" = 1 WHERE ("articles"."id" = 1 AND "articles"."lock_version" = 0)
(0.1ms) rollback transaction
ActiveRecord::StaleObjectError: Attempted to update a stale object: Article
【问题讨论】:
-
可能是默认值,但是锁版本列应该有默认值0(在数据库中)
-
你确定你是第一次这样做吗?
-
@FrederickCheung lock_version 已经是 0
标签: ruby-on-rails ruby rails-activerecord optimistic-locking