【发布时间】:2014-08-08 17:48:11
【问题描述】:
我应该把 "PRAGMA FOREIGNS KEYS = ON;" 放在 rails 4.0 的什么地方?
我知道它是连接设置,所以我必须让 rails 在删除某些内容时将其放置,但我不知道将其放置在哪里。我在选项中的 database.yml 中尝试过,但它不起作用。谷歌搜索不到放在哪里。我希望它使级联删除工作。
【问题讨论】:
标签: ruby-on-rails sqlite database-connection
我应该把 "PRAGMA FOREIGNS KEYS = ON;" 放在 rails 4.0 的什么地方?
我知道它是连接设置,所以我必须让 rails 在删除某些内容时将其放置,但我不知道将其放置在哪里。我在选项中的 database.yml 中尝试过,但它不起作用。谷歌搜索不到放在哪里。我希望它使级联删除工作。
【问题讨论】:
标签: ruby-on-rails sqlite database-connection
语法是这样的:
drop table if exists db_name.table_name
if 存在的地方和 db_name。零件是可选的。那里没有 CASCADE,因此 SQLite 在使用 DROP TABLE 时根本不支持 CASCADE,并且您无法添加它(当然,除非您想破解 SQLite C 源代码并自己添加它)。使用 SQLite 时必须接受某些限制,这就是其中之一。
如果您想为 SQLite 和 MySQL 使用一个迁移,那么您必须检查正在使用哪个数据库并执行适当的 SQL 或找到在任何地方都可以使用的东西(即手动执行 CASCADE)。我现在能想到的检查您正在使用的数据库的简单方法是:
case connection
when ActiveRecord::ConnectionAdapters::PostgreSQLAdapter
# PostgreSQL things go here
when ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter
# MySQL things go here
when ActiveRecord::ConnectionAdapters::SQLiteAdapter
# SQLite things go here
...
end
【讨论】: