Я изучаю рельсы и читаю об оптимистичной блокировке. Я добавил lock_version
столбец типа integer
в таблицу articles
.Rails - Оптимистическая блокировка всегда срабатывает исключение StaleObjectError
Но теперь, когда я пытаюсь обновить запись в первый раз, я получаю исключение StaleObjectError
.
Вот моя миграция:
class AddLockVersionToArticle < ActiveRecord::Migration
def change
add_column :articles, :lock_version, :integer
end
end
Когда я пытаюсь обновить статью через рельсы консоли:
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 (в базе данных) –
Уверены ли вы это сделать в первый раз? – CodeGroover
@FrederickCheung lock_version уже 0 – CodeGroover