为什么model.read_attribute返回nil?

时间:2014-03-02 10:06:02

标签: ruby-on-rails ruby rspec rails-activerecord rspec-rails

注意:这种情况只发生在我的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

1 个答案:

答案 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。

相关问题