首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >乐观锁定从零开始?

乐观锁定从零开始?
EN

Stack Overflow用户
提问于 2016-05-02 14:03:54
回答 1查看 452关注 0票数 0

首先,让我说rails乐观锁定的行为似乎是有效的,我只是想了解为什么我的单元测试返回它的值。在运行我的单元测试时,要检查lock_version是否增加,而assert_not_equal则得到一个通过的测试。当我将测试设置为assert_equal时,它会失败,但是消息返回的是零而不是0。为什么?

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

单元测试

代码语言:javascript
复制
  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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-03 16:55:09

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

代码语言:javascript
复制
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并在数据库中重新创建对象确实修复了它。不确定这是否是一个已知的错误,或者不是,但我的一个同事将有机会与一个在增强适配器gem上工作的人交谈,看看我们是否能获得更多的洞察力。

通过上述更改,乐观锁定行为正在发挥作用。注:我最初使用的迁移起源于这个铁轨

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36984388

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档