gpt4 book ai didi

ruby-on-rails - 如何让 Ruby on Rails 创建启用外键的 SQLite 数据库?

转载 作者:IT王子 更新时间:2023-10-29 06:28:14 25 4
gpt4 key购买 nike

我是 Ruby on Rails 的新手,我使用 SQLite3 作为我的示例项目的数据库。我正在尝试在两个模型之间创建普通的一对多关系(例如,每个产品有一个所有者,每个所有者可以有多个产品)。这工作正常并且数据库模式已正确创建。但是,当我在数据库管理工具中打开 development.sqlite3(我使用免费的 SQLite Express Personal http://www.sqliteexpert.com/download.html)时,我没有看到数据库具有参照完整性。 Product 表没有列出外键,即使它确实包含 owner_id 列。

我尝试通过添加选项键来更改 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 的信息自行管理外键在模型中。

Rails 4.2 supports add_foreign_keymigrations .但是你不能将它用于 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 仅支持对单个列的外键引用。

如果您想学习 Rails 由 dbms 强制执行的引用完整性,您需要 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.

关于ruby-on-rails - 如何让 Ruby on Rails 创建启用外键的 SQLite 数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29281375/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com