Rails迁移如何实施关系?

时间:2009-02-08 12:24:29

标签: ruby-on-rails database-design web-applications migration

当你跑步时:

rake db:migrate

正在处理的唯一文件是db / migrate / right?

中的文件

因为在app / models /中定义了一对一,一对多和多对多等关系,Rails如何实施这种关系?在我进行迁移并查看生成的数据库模式后,我看不到任何外键约束。因此,对于这一切是如何运作的,我感到很困惑。

3 个答案:

答案 0 :(得分:6)

很简单,它没有。

这是因为必须支持多个数据库。某些(例如sqlite)不支持外键。

要添加外键,您必须为它们执行原始SQL。

答案 1 :(得分:2)

正如其他人所说,Rails根本不使用SQL关系,只是在代码中模仿它。它实际上并没有强制执行引用完整性,但它看起来确实如此。

由于这个原因,您应该使用迁移,但是使用原始DDL创建并保护您的数据库,因为Rails哲学存在缺陷,因为它仍然会离开您数据模型大开,同时提供一些安全措施(由激光保护的开放式安全装置,是我喜欢的方式)。显然你会失去迁移的好处(我想你可以保留迁移并手动添加执行语句)。请参阅Dan Chak的书籍 Enterprise Rails ;他有几章讨论这个并展示他的想法。

答案 2 :(得分:1)

Garry是对的,约束是由应用程序本身强制执行的。 如果你真的希望设置外键,foreign_key_migrations插件可以很好地为你服务。