【发布时间】:2013-06-21 11:17:04
【问题描述】:
我在一个简单的应用程序中使用 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
我在Sale 中没有date 属性,所以我不确定这是从哪里来的。首先我认为我得到的Day 对象没有设置日期,所以我做了d = Day.get(1).date = Time.now 和saved,但这并不能解决错误。
我弄坏了什么?
编辑 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");
【问题讨论】:
-
错误的语法看起来可能来自数据库。您可以进入数据库控制台并检查架构(在此处发布)吗?
-
我该怎么做?忘了说,数据库是SQLite3。
-
只需在控制台输入
sqlite3 <name_of_database_file>,然后输入.schema sales。.help寻求帮助,.quit退出。如果这是生产数据,请避免做任何其他事情(尽管您可以获取文件的副本以使用) -
@NeilSlater 我添加了架构。检查编辑。
-
谢谢。与此相关的架构似乎我错了,没有
sales.date列。但是,这是有用的信息,因此值得留在问题中。
标签: ruby datamapper