単純なアプリケーションで DataMapper を使用して売上を追跡しています。次のDay
ようなクラスがあります。
class Day
include DataMapper::Resource
property :id, Serial, :key => true
property :date, DateTime
property :bestseller, String
property :total_money, Decimal
property :total_sold, Integer
property :total_orders, Integer
has n, :sales
end
そしてSales
クラス:
class Sale
include DataMapper::Resource
belongs_to :day
property :id, Serial, :key => true
property :name, String
property :amount, Integer
property :value, Integer
end
データベースに新しいものを追加しようとするとSale
、次のようになります。
s = Sale.new(:day => Day.get(1), :name => "Foo", :amount => "42", :value => "42"
を呼び出すと、このエラーが発生しますsave
。
DataObjects::IntegrityError at /sell
sales.date may not be NULL
にはdate
プロパティがないSale
ため、これがどこから来ているのかわかりません。最初に、Day
私が取得しているオブジェクトには日が設定されていないと思ったので、それを実行しd = Day.get(1).date = Time.now
ましsave
たが、これはエラーを解決しません。
私は何を壊しましたか?
編集sqlite3 スキーマ
CREATE TABLE "sales" (
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
"name" VARCHAR(50),
"amount" INTEGER,
"value" INTEGER,
"day_id" INTEGER NOT NULL,
"drink_id" INTEGER NOT NULL
);
CREATE INDEX "index_sales_day" ON "sales" ("day_id");
CREATE INDEX "index_sales_drink" ON "sales" ("drink_id");