乐观锁定从零开始?

时间:2016-05-02 14:03:55

标签: ruby-on-rails unit-testing minitest optimistic-locking

让我先说明rails rails乐观锁定的行为似乎正在起作用,我只是想了解为什么我的单元测试返回它的值。运行我的单元测试时,检查lock_version是否递增,assert_not_equal我得到了通过测试。当我将测试设置为assert_equal时,它会失败,但是消息返回nil而不是0.为什么?

lock_version详情 Data_type => Number(38,0), Nullable => No, Data_default => 0

单元测试

  test "optimistic locking increments" do
    invoice = create(:invoice)
    first  = Invoice.find(invoice.invoice_id)
    second = Invoice.find(invoice.invoice_id)
    first.currency  = "GBP"
    second.currency = "EUR"
    first.save
    second.save
    assert_equal first.lock_version, second.lock_version 
  end
  

预期:无     实际:1

更新

当我将测试更改为assert_not second.save时,它失败了。我的理解是乐观锁定应该阻止保存(更新)第二个值。为什么不是?

按照Kristján的建议first.lock_version返回“”,而不是0

1 个答案:

答案 0 :(得分:0)

当我生成lock_version列时,我使用了以下迁移。

class AddLockVersionToInvoice < ActiveRecord::Migration
  def change
    add_column :ch_invoice, :lock_version, :integer, default: 0, null: false
  end
end

<强>宝石

ruby-oci8 (2.2.1) activerecord-oracle_enhanced-adapter (1.6.7, 1.6.6)

不知何故,这种组合不起作用。删除null:false并在数据库中重新创建对象DID修复它。不确定这是否是一个已知错误,但是我的同事将有机会与使用增强适配器gem的人交谈,看看我们是否可以获得更多见解。

通过上述更改,乐观锁定行为正在发挥作用。 注:我原先使用的迁移来自此railscast