首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使Rails创建启用外键的SQLite数据库?

问如何使Rails创建启用外键的SQLite数据库?
EN

Stack Overflow用户
提问于 2015-03-26 14:41:41
回答 2查看 2.9K关注 0票数 5

我是Rails的新手,我在我的示例项目中使用SQLite3作为数据库。我试图在两种模式之间建立普通的一对多的关系。每个产品有一个所有者,每个所有者可以拥有许多产品)。这样做很好,并且正确地创建了数据库模式。但是,当我在数据库管理工具中打开development.sqlite3 (我使用免费的SQLite Express个人http://www.sqliteexpert.com/download.html)时,我不认为数据库具有引用完整性。产品表中没有列出外键,即使它包含owner_id列。

我尝试通过添加选项键来更改database.yml:

代码语言:javascript
复制
default: &default
adapter: sqlite3
pool: 5
timeout: 5000
options: "PRAGMA foreign_keys=ON"

然后用以下方法重新创建数据库:

代码语言:javascript
复制
rake db:drop db:create db:migrate

这将重新创建数据库,但仍然没有列出外键。

我做错了什么吗?有没有办法解决这个问题。(PS. )我正在Windows8.1上运行所有这些(如果这很重要的话)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-28 05:19:13

默认情况下,Rails不创建外键引用。Rails使用从模型中的联想派生的信息管理外键值本身。

钥匙 in 迁徙.但是您不能在SQLite中使用它,因为SQLite不支持Rails用于创建外键的特定ALTER语句。SQLite有非常对ALTER的有限支持。

省略了其他类型的ALTER操作,如DROP列、ALTER列、ADD约束等等。

此外,add_foreign_key只支持对单个列的外键引用。

如果您想学习由dbms强制执行的具有引用完整性的Rails,您需要:( a)切换到类似PostgreSQL或MySQL之类的东西,或者( b)在迁移中执行原始SQL。即使使用PostgreSQL这样的语句也会更容易,主要是因为它完全支持标准的ALTER语句。

如果我是你,我不会担心外键会被dbms强制执行。首先要等到您对Rails环境和Rails约定感到满意为止。

Rails 4.2的发行说明还或多或少地说,add_foreign_key还没有与SQLite一起工作。

迁移DSL现在支持添加和删除外键。他们也被甩给schema.rb了。此时,只有mysql、mysql2和postgresql适配器支持外键。

票数 7
EN

Stack Overflow用户

发布于 2018-08-09 09:19:18

下面是我在Rails 5.x文档中清除这些内容的尝试:

https://github.com/rails/rails/pull/33563

此时,只有mysql、mysql2和postgresql适配器支持外键。sqlite3的实现是部分的,键是为新表创建的,而不是通过ALTER TABLE语句为现有表创建的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29281375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档