当你跑步时:
rake db:migrate
正在处理的唯一文件是db / migrate / right?
中的文件因为在app / models /中定义了一对一,一对多和多对多等关系,Rails如何实施这种关系?在我进行迁移并查看生成的数据库模式后,我看不到任何外键约束。因此,对于这一切是如何运作的,我感到很困惑。
答案 0 :(得分:6)
很简单,它没有。
这是因为必须支持多个数据库。某些(例如sqlite)不支持外键。
要添加外键,您必须为它们执行原始SQL。
答案 1 :(得分:2)
正如其他人所说,Rails根本不使用SQL关系,只是在代码中模仿它。它实际上并没有强制执行引用完整性,但它看起来确实如此。
由于这个原因,您应该不使用迁移,但是使用原始DDL创建并保护您的数据库,因为Rails哲学存在缺陷,因为它仍然会离开您数据模型大开,同时提供一些安全措施(由激光保护的开放式安全装置,是我喜欢的方式)。显然你会失去迁移的好处(我想你可以保留迁移并手动添加执行语句)。请参阅Dan Chak的书籍 Enterprise Rails ;他有几章讨论这个并展示他的想法。
答案 2 :(得分:1)
Garry是对的,约束是由应用程序本身强制执行的。
如果你真的希望设置外键,foreign_key_migrations
插件可以很好地为你服务。