2013-06-21 1 views
2

간단한 응용 프로그램에서 DataMapper를 사용하여 판매를 추적하고 있습니다.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 클래스 : 나는이 같은 Day 클래스를 가지고

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" 

I save을 호출 할 때이 오류가 발생합니다.

DataObjects::IntegrityError at /sell 
sales.date may not be NULL 

나는 Sale에 더 date 속성이 없기 때문에 나는이 어디에서 오는 모르겠어요. 처음에는 Day 개체에 하루가 설정되어 있지 않아서 d = Day.get(1).date = Time.nowsave d 개가 발생했다고 생각했지만 오류가 해결되지 않았습니다.

무엇이 중단 되었습니까?

편집 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

오류의 구문이 데이터베이스에서 발생한 것 같습니다. db 콘솔에 가서 스키마를 점검 할 수 있습니까? (여기에 게시하십시오)? –

+0

어떻게하면됩니까? 언급을 잊어 버렸습니다. 데이터베이스는 SQLite3입니다. – Nekkoru

+0

'sqlite3 '을 콘솔에 입력하고'.schema sales'를 도움말에 대해서는 .help', 종료하려면'.quit'에 입력하십시오. 이것이 프로덕션 데이터 인 경우 다른 작업은 수행하지 마십시오 (작업 할 파일의 복사본을 가져올 수도 있음) –

답변

2

내가 그것을 고정 생각합니다. 분명히 Sale에 한 번에 오래된 date 속성이 있습니다. Ruby 인터프리터에 들어가서 모델을 필요로하고 DataMapper.auto_migrate!을 사용하여 전체 데이터베이스를 다시 설정했습니다. 이 문제가 해결되었습니다.