加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 如何使Ruby on Rails创建启用了外键的SQLite数

发布时间:2020-12-17 03:32:37 所属栏目:百科 来源:网络整理
导读:我是 Ruby on Rails的新手,我使用SQLite3作为我的示例项目的数据库.我试图在两个模型之间创建普通的一对多关系(例如,每个产品有一个所有者,每个所有者可以有许多产品).这很好,并且正确创建了数据库模式.但是,当我在数据库管理工具(我使用免费的SQLite Expres
我是 Ruby on Rails的新手,我使用SQLite3作为我的示例项目的数据库.我试图在两个模型之间创建普通的一对多关系(例如,每个产品有一个所有者,每个所有者可以有许多产品).这很好,并且正确创建了数据库模式.但是,当我在数据库管理工具(我使用免费的SQLite Express Personal http://www.sqliteexpert.com/download.html)中打开development.sqlite3时,我没有看到该数据库具有参照完整性.即使包含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上运行所有这些)

解决方法

默认情况下,Rails不会创建外键引用. Rails使用它在模型中从 associations派生的信息来管理外键值本身.

但是你不能在SQLite中使用它,因为SQLite不支持Rails用来创建外键的特定ALTER TABLE语句. SQLite非常有limited support for ALTER TABLE.

Other kinds of ALTER TABLE operations such as DROP COLUMN,ALTER
COLUMN,ADD CONSTRAINT,and so forth are omitted.

此外,add_foreign_key仅支持对单个列的外键引用.

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

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

The release notes for Rails 4.2或多或少地说,add_foreign_key还不能与SQLite一起使用.

The migration DSL now supports adding and removing foreign keys. They are dumped to schema.rb as well. At this time,only the mysql,mysql2 and postgresql adapters support foreign keys.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读