作者:叶小丹丶丶01_520 | 来源:互联网 | 2023-05-16 11:30
我是Ruby on Rails的新手,我使用SQLite3作为我的示例项目的数据库.我试图在两个模型之间创建普通的一对多关系(例如,每个产品有一个所有者,每个所有者可以有许多产品).这很好,并且正确创建了数据库模式.但是,当我在数据库管理工具中打开development.sqlite3时(我使用免费的SQLite Express Personal http://www.sqliteexpert.com/download.html)我没有看到该数据库具有参照完整性.即使包含owner_id列,也没有为Product表列出外键.
我尝试通过添加选项键来更改database.yml:
default: &default
adapter: sqlite3
pool: 5
timeout: 5000
options: "PRAGMA foreign_keys=ON"
然后重新创建数据库:
rake db:drop db:create db:migrate
这会重新创建数据库,但同样没有列出外键.
难道我做错了什么?是否有解决方案.(PS.如果这很重要,我在Windows 8.1上运行所有这些)
1> Mike Sherril..:
默认情况下,Rails不会创建外键引用.Rails的管理外键的值本身,用它从派生的信息关联的模型.
Rails 4.2在迁移中支持add_foreign_key.但是你不能在SQLite中使用它,因为SQLite不支持Rails用来创建外键的特定ALTER TABLE语句.SQLite 对ALTER TABLE的支持非常有限.
省略了其他种类的ALTER TABLE操作,例如DROP COLUMN,ALTER COLUMN,ADD CONSTRAINT等.
此外,add_foreign_key仅支持对单个列的外键引用.
如果您想了解Rails的与由DBMS强制引用完整性,你需要到任何一个)切换到类似的PostgreSQL或MySQL,或b)在迁移执行原始的SQL.使用像PostgreSQL这样的东西会更容易,主要是因为它完全支持标准的ALTER TABLE语句.
如果我是你,我不会担心dbms强制执行外键.等到你对Rails环境和Rails约定感到满意为止.
Rails 4.2的发行说明或多或少地说,add_foreign_key还不能与SQLite一起使用.
迁移DSL现在支持添加和删除外键.它们也被转储到schema.rb.这时,只有mysql,mysql2和postgresql适配器支持外键.