2013-03-20 47 views
1

这是一个关于Ruby on Rails和Active Record的新手问题。我创建了一个rails应用程序,一个sqlite表和一个名为Thing的模型类映射到表。然后我运行rails控制台,如下所示。为什么id字段没有正确保存?为什么不在这个简单的Active Record示例中保存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 

回答

3

这是有点混乱。但我想你的模式是有问题的。您是否在迁移文件中明确定义了id字段?

我在说这个,因为主字段也应该自动递增。确保我刚刚登录了我的电脑。对于一个表我的模式是这样的:

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

在这里你可以看到你的差异。

+0

啊,就是这样。谢谢。我手动创建了表格。它可能会抛出关于ID列定义的错误。 – 2013-03-20 20:03:24

1

我想你会发现如果你运行rake db:migrate它会创建一个自动递增的id列的东西表。这将以你期待的方式工作。我不会建议手动创建你的表格。

相关问题