我开始使用 Ruby 和 DataMapper,我偶然发现了一个我认为没有任何意义的问题。假设我有以下模型:
class Foo
include DataMapper::Resource
property :id, Serial
property :date, Date, required: true
def initialize
@date = Date.today
end
end
我打开 IRB 来测试我的模型,设置数据库连接,并尝试保存一个新的 foo:
> foo = Foo.new
> foo.date
=> #<Date: 2013-03-28 ((2456380j,0s,0n),+0s,2299161j)>
> foo.save
然后我得到以下异常:
DataObjects::IntegrityError: foos.date 可能不是 NULL
这完全有道理,因为我按要求标记了日期。但是日期是有的!我在类的构造函数中分配了它!如果我没有用今天的日期初始化它并尝试保存,我只会收到验证错误。没有例外。
我不明白(这就是我希望你回答的)是,如果我更换
@date = Date.today
和
self.date = Date.today
有用!foo 被正确保存。这是为什么?它是 DataMapper 内部的错误吗?