@ledsun blog

無味の味は佳境に入らざればすなわち知れず

レコード削除時 ActiveRecord::StaleObjectError は発生する?

楽観的ロックシリーズの三回目です。

レコード削除時は ActiveRecord::StaleObjectError は発生するのか?

します。Ruby on Railsには削除時にActiveRecord::StaleObjectErrorが発生することを確認するテストケースがあります。

https://github.com/rails/rails/blob/c944893a5fba236378202f3580ad9f3a8944599f/activerecord/test/cases/locking_test.rb#L94-111

  def test_lock_destroy
    p1 = Person.find(1)
    p2 = Person.find(1)
    assert_equal 0, p1.lock_version
    assert_equal 0, p2.lock_version

    p1.first_name = "stu"
    p1.save!
    assert_equal 1, p1.lock_version
    assert_equal 0, p2.lock_version

    assert_raises(ActiveRecord::StaleObjectError) { p2.destroy }

    assert p1.destroy
    assert_predicate p1, :frozen?
    assert_predicate p1, :destroyed?
    assert_raises(ActiveRecord::RecordNotFound) { Person.find(1) }
  end

これをWebアプリケーションにどう組み込めばいいのでしょうか?