注意:这种情况只发生在我的rspec规范中。
我的理解是model.read_attribute(:attr_name)
returns a typecasted attribute value。这意味着如果attr_name
属于整数列,read_attribute(:attr_name)
将返回一个Fixnum。
但是...
model.read_attribute(:attr_name)
返回nil
model.attr_name
返回非零Fixnum
值
Rails版本:4.0.3
答案 0 :(得分:1)
TLDR版本
我的代码期望attr_name
的默认值至少为0
,但由于某些情况,数据库表中attr_name
列的默认值为null。这导致了我上面提到的错误。
详细解释
我的开发数据库的架构与我的生产数据库不同步(由于一些未投入生产的迁移)。因此,每当我运行rake db:migrate
时,它都会根据不同步的开发数据库架构创建schema.rb
。然后rake db:test:prepare
使用此模式,根据过时的模式创建数据库。最重要的是,代码期望attr_name
的值至少为attr_name
的0值,但在过时的模式中,attr_name
列默认为null。