让我先说明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
答案 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。