1

这是一个关于 Ruby on Rails 和 Active Record 的新手问题。我创建了一个 rails 应用程序、一个 sqlite 表和一个调用Thing以映射到表的模型类。然后我运行 rails 控制台,如下所示。为什么该id字段未正确保存?

irb(main):005:0> Thing.all
  Thing Load (0.2ms)  SELECT "things".* FROM "things"
=> []
irb(main):006:0> t = Thing.new :name => 'test'
=> #<Thing id: nil, name: "test", somedate: nil>
irb(main):007:0> t.id
=> nil
irb(main):009:0> t.save
   (0.2ms)  begin transaction
  SQL (3.4ms)  INSERT INTO "things" ("name", "somedate") VALUES (?, ?)  [["name", "test"], ["somedate", nil]]
   (0.8ms)  commit transaction
=> true
irb(main):010:0> Thing.all
  Thing Load (0.2ms)  SELECT "things".* FROM "things"
=> [#<Thing id: nil, name: "test", somedate: nil>]
irb(main):011:0> t.id
=> 1

在sqlite中;

sqlite> .schema things
CREATE TABLE things (id int primary key, name text, somedate date);

该模型:

class Thing < ActiveRecord::Base
  attr_accessible :name
end
4

2 回答 2

3

这有点令人困惑。但我猜你的架构有问题。id您是否在迁移文件中明确定义了字段?

我这么说是因为,主字段也应该自动递增。以确保我刚刚签入我的电脑。对于一个表,我的架构是这样的:

CREATE TABLE "albums" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "user_id" integer,......

在这里,您可以看到与您的区别。

于 2013-03-20T19:57:06.957 回答
1

我想你会发现,如果你运行rake db:migrate它,它会创建一个带有自动递增 id 列的 things 表。这将按您期望的方式工作。我不建议您手动创建表格。

于 2013-03-20T20:04:17.653 回答