我的主键怎么了?

时间:2009-09-15 01:48:30

标签: ruby-on-rails database

我正在使用rails 2.3.4

当我执行rake db:test:prepare时,创建的id字段不是主键并自动递增。

当我查看开发db时,主键没有问题。

使用MySQL。

编辑:看起来我的schema.rb文件已更改:id =>假应该是真的。什么生成此文件?数据库迁移?

[编辑]生成schema.rb文件的实际机制是什么?

3 个答案:

答案 0 :(得分:1)

嘿,我昨天看了这个问题,看到没有人回答,所以我会尽力帮助,说实话我不知道为什么会发生这种情况,主要是因为我没有真正使用'准备'任务。在针对空数据库运行迁移时,会创建schema.rb。

我通常运行db:test:clone,只要对该方案进行了更改,这可以确保您的测试数据库始终与您当前的环境保持一致。也许尝试删除数据库并从迁移中重新创建它,然后运行克隆。在此之后,架构仍显示:id =>假?如果是这样,您可以发布正在创建相关表格的迁移。

答案 1 :(得分:1)

执行rake任务时,如果未指定环境,则会将任务执行到默认环境。

您的测试和开发数据库之间可能有不同的架构版本。

rake db:reset #drops and created the database for current environment
rake db:reset:all #drops and creates database for all environments
rake db:migrate #migrates the schema for the current environment
rake db:migrate RAILS_ENV=test #migrates the schema for the test environment

如果我没错(正如我现在记得的那样)

rake db:migrate #applies the migrations and dumps the schema to db/schema.rb file
rake db:schema:dump #dumps the actual state of your current environment schema into db/schema.rb file

答案 2 :(得分:1)

如果你使用'reset'然后'db:test:prepare'你可能会得到你期待的结果。 像这样:

rake db:reset
rake db:test:prepare

这将:

  • 根据您最新的迁移重新创建开发人员数据库
  • 根据迁移/ dev数据库
  • 重新创建schema.rb文件
  • 根据schema.rb文件重新创建测试数据库。