我正在开发一个Ruby on Rails应用程序,并使用foreigner插件在迁移中设置外键约束,例如像这样。
add_foreign_key(:notifications, :invitations, :dependent => :delete)
但是,当我使用
运行迁移时 rake db:migrate
它运行,但我的schema.rb文件保持不变。是否应该在其他数据库上反映更改?
答案 0 :(得分:3)
如果你使用的是mysql,你可以测试它是否真的创建了外键吗?我同意根据schema.rb文档,如果您计划将应用程序移动到另一个系统,则应运行rake db:schema:load。因此,如果信息不存在,它显然将无法工作。您将被迫执行所有迁移。我一直在阅读外国人宝石源代码,似乎宝石应该在你的架构中注入语句。我认为代码的链接是:
https://github.com/matthuhiggins/foreigner/blob/master/lib/foreigner/schema_dumper.rb
我唯一可以告诉你尝试的是从头开始生成schema.rb,看看架构是否完全填充。如果不是这样,当您移动到另一个系统时,您似乎将强制运行迁移。您也可以在github项目页面上发布您的问题。开发人员通常很快回答。
答案 1 :(得分:1)
所以,多亏了ctilly79,我找到了答案。出于某种原因,我认为,因为我使用SQLite,它仍然会使Schema.rb中的外键用于生产。不是这种情况。你必须使用支持外键的东西,比如MySQL才能工作。