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