乐观锁以nil开头?
Optimistic Locking starts with nil?
让我先说 rails 乐观锁定的行为似乎有效,我只是想了解为什么我的单元测试返回的值是它的值。当 运行 我的单元测试时,检查 lock_version 是否递增,而 assert_not_equal
我通过了测试。当我将测试设置为 assert_equal
时,它失败了,但是消息 returns 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
Expected: nil
Actual: 1
更新
当我将测试更改为 assert_not second.save
时,它失败了。我的理解是乐观锁定应该防止保存(更新)第二个值。为什么不是呢?
根据 Kristján 的建议 first.lock_version
returns "",不是 0
当我生成 lock_version 列时,我使用了以下迁移。
class AddLockVersionToInvoice < ActiveRecord::Migration
def change
add_column :ch_invoice, :lock_version, :integer, default: 0, null: false
end
end
gems
ruby-oci8 (2.2.1)
activerecord-oracle_enhanced-adapter (1.6.7, 1.6.6)
这个组合不知何故不起作用。删除 null:false
并在数据库中重新创建对象确实修复了它。不确定这是否是已知错误,但我的一位同事将有机会与从事增强型适配器工作的人交谈 gem,看看我们是否可以获得更多见解。
通过上述更改,乐观锁定行为正在发挥作用。
N.B。我原先使用的migration来源于这个railscast.
让我先说 rails 乐观锁定的行为似乎有效,我只是想了解为什么我的单元测试返回的值是它的值。当 运行 我的单元测试时,检查 lock_version 是否递增,而 assert_not_equal
我通过了测试。当我将测试设置为 assert_equal
时,它失败了,但是消息 returns 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
Expected: nil Actual: 1
更新
当我将测试更改为 assert_not second.save
时,它失败了。我的理解是乐观锁定应该防止保存(更新)第二个值。为什么不是呢?
根据 Kristján 的建议 first.lock_version
returns "",不是 0
当我生成 lock_version 列时,我使用了以下迁移。
class AddLockVersionToInvoice < ActiveRecord::Migration
def change
add_column :ch_invoice, :lock_version, :integer, default: 0, null: false
end
end
gems
ruby-oci8 (2.2.1)
activerecord-oracle_enhanced-adapter (1.6.7, 1.6.6)
这个组合不知何故不起作用。删除 null:false
并在数据库中重新创建对象确实修复了它。不确定这是否是已知错误,但我的一位同事将有机会与从事增强型适配器工作的人交谈 gem,看看我们是否可以获得更多见解。
通过上述更改,乐观锁定行为正在发挥作用。 N.B。我原先使用的migration来源于这个railscast.