Rails测试数据库缺少主键

时间:2015-11-10 22:31:39

标签: mysql ruby-on-rails ruby database

我试图在Rails中运行Capybara测试,但是它们失败了,因为我的测试数据库缺少其中一个表的主键。我运行了rake db:schema:dump然后RAILS_ENV=test rake db:schema:load,但主键仍然缺失。

我现在有两个问题。模式应该捕获我的开发数据库中的所有主键吗?如果是这样,我的测试数据库怎么没有看到那个主键?如果不是,可能导致数据库不匹配的原因和可能的解决方案是什么?

提前致谢。

编辑:

找到更多信息。当我运行rake db:schema:dump时,在生成的模式文件中,我看到:

create_table "model", :id => false, :force => true do |t| ...

据推测,这就是我运行RAILS_ENV=test rails db:schema:load时未设置主键的原因。令人困惑的部分是我的开发数据库确实在id上有一个主键。什么可能导致:id => false选项包含在架构中?

1 个答案:

答案 0 :(得分:0)

模式转储器使用AR连接方法来获取表的PK。当表没有具有对应于表列的PK时,包含:id => false选项。

要确认开发数据库表有PK,您可以在Rails开发控制台中尝试以下操作(将Task / tasks替换为您的模型/表名称):

irb(main):006:0> Task.connection.primary_key('tasks') 
=> "id"

请参阅activerecord/lib/active_record/schema_dumper.rb