2

単純なアプリケーションで 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");
4

1 に答える 1

2

私はそれを修正したと思います。dateどうやら、私は のある時点で古い物件を持っていたようSaleです。Ruby インタープリターに入り、モデルを要求してDataMapper.auto_migrate!、データベース全体をリセットしました。これで問題は解決しました。

于 2013-06-21T16:25:44.467 に答える