如何在测试数据库中迁移期间使用SQL(创建外键)?

时间:2014-08-01 14:21:54

标签: ruby-on-rails

我对rails(3.2.13)开发很新,并且无法找到办法去做我正在尝试做的事情。

后台:我创建了一个迁移,由于没有其他方法可以使用sqlite执行此操作,因此使用外键在数据库中创建一个新表。具体来说,我跑了:

rails g model period_type_specs period_type_id:integer start_date:datetime end_date:datetime user:references

然后我想确保period_type_specs表具有外键约束(period_type_id -> period_types(period_type_id))。在研究并尝试了一些事情之后,我发现使用sqlite的唯一事情是,在CreatePeriodTypeSpecs迁移文件中,使用'execute'替换纯SQL的内容,以创建具有所需外键的表。这工作 - 也就是说,在rake db:migrate之后,在开发数据库中创建了具有所需外键的新表。

问题:到目前为止,我还没有找到“kosher”方法将相同的表/架构放入测试数据库。 db:migrate之后,rake db:test:prepare创建表,但没有外键。我相信这是因为db:test:prepare只使用db / schema.rb来创建缺失的表和schema.rb使用标准的“create_table ...”操作,并且(我相信)schema.rb不支持原始SQL

此时我想到的唯一方法是在测试数据库中创建我想要的表,只需从迁移文件直接在测试数据库上运行sql命令即可。但是,当然,这会干扰使用rake重置或删除然后自动重新创建数据库架构的目标。

那么 - 有没有办法在不作弊的情况下做我想做的事情?

更新:我最后把SQL语句用外键创建到db / seeds.rb中,这也是它所引用的表(静态引用表)的位置。填充。

0 个答案:

没有答案