DataMapper看不到分配给@的属性

时间:2013-03-28 15:27:20

标签: ruby datamapper ruby-datamapper

我开始使用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中的错误吗?

1 个答案:

答案 0 :(得分:1)

在提出DataMapper的问题之后,我被告知这是设计的。要使脏跟踪起作用,必须绝对使用属性writer,而不是直接设置实例变量。