在带有Foreigner Gem / Plugin的Ruby on Rails中,外键设置应该在Schema.rb中可见吗?

时间:2012-02-11 16:59:00

标签: ruby-on-rails foreign-keys rails-migrations schema.rb

我正在开发一个Ruby on Rails应用程序,并使用foreigner插件在迁移中设置外键约束,例如像这样。

add_foreign_key(:notifications, :invitations, :dependent => :delete)

但是,当我使用

运行迁移时

rake db:migrate

它运行,但我的schema.rb文件保持不变。是否应该在其他数据库上反映更改?

2 个答案:

答案 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才能工作。