我试图在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
选项包含在架构中?
答案 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