【问题标题】:Datamapper - weird may not be NULL errorDatamapper - 奇怪的可能不是 NULL 错误
【发布时间】: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.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");

【问题讨论】:

  • 错误的语法看起来可能来自数据库。您可以进入数据库控制台并检查架构(在此处发布)吗?
  • 我该怎么做?忘了说,数据库是SQLite3。
  • 只需在控制台输入sqlite3 <name_of_database_file>,然后输入.schema sales.help 寻求帮助,.quit 退出。如果这是生产数据,请避免做任何其他事情(尽管您可以获取文件的副本以使用)
  • @NeilSlater 我添加了架构。检查编辑。
  • 谢谢。与此相关的架构似乎我错了,没有sales.date 列。但是,这是有用的信息,因此值得留在问题中。

标签: ruby datamapper


【解决方案1】:

我想我修好了。显然,我在Sale 的某个时间点有一个旧的date 属性。我进入了 ruby​​ 解释器,需要我的模型并使用 DataMapper.auto_migrate! 重置整个数据库。这解决了问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-22
    • 1970-01-01
    • 2018-06-03
    • 1970-01-01
    相关资源
    最近更新 更多