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 内のバグですか?