2013-06-21 72 views
2

我在一個簡單的應用程序中使用DataMapper來跟蹤銷售。我有一個Day類,像這樣:Datamapper - 奇怪的可能不是NULL錯誤

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.nowsaved,但這不能解決錯誤。

我破了什麼?

編輯的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"); 
+0

錯誤的語法看起來像它可能來自數據庫。你可以進入數據庫控制檯並檢查模式(在此處發佈)? –

+0

我該怎麼做?我忘了提及,數據庫是SQLite3。 – Nekkoru

+0

只需在控制檯輸入'sqlite3 ',然後在'.help'中輸入'.schema sales'來獲得幫助,'.quit'退出。如果這是生產數據,請避免做其他事情(雖然您可以將該文件的副本用於工作) –

回答

2

我想我固定它。顯然,我在Sale的某個時間點有一箇舊的date屬性。我進入了Ruby解釋器,需要我的模型,並使用DataMapper.auto_migrate!來重置整個數據庫。這解決了這個問題。