讓我先說這個,說鐵軌樂觀鎖定的行爲似乎正在工作,我只是想明白爲什麼我的單元測試返回它的價值。在運行我的單元測試時,檢查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
UPDATE
當我將測試更改爲assert_not second.save
時,它失敗。我的理解是樂觀鎖定應該防止保存(更新)第二個值。爲什麼不可以呢?
按照克里斯蒂安的建議first.lock_version
返回「」,而不是0
在找到要驗證數據庫缺省值爲0的對象之後,能否打印您的'lock_version'?否則,樂觀鎖定會使它「無」直到成功更新。 –
查找對象後,打印first.lock_version時不返回任何內容。即使我在我的工廠中將其指定爲0,它仍然沒有出現。 在SQL Developer中查看模型我得到的默認值爲0的確認,但是您的打印建議讓我懷疑我是否缺少其他東西。 – CheeseFry