Rails:创建一个级联删除表的迁移

25

如何在Rails 3.2迁移中强制执行DROP TABLE CASCADE?

是否有一个选项可以传递给drop_table(“table_name”)?

3个回答

59

在Rails 4中,你可以这样做:

drop_table :accounts, force: :cascade

11
你可以在迁移中始终运行原始 SQL。 MYSQL:
execute "DROP TABLE #{:table_name} CASCADE CONSTRAINTS PURGE"

PostgreSQL:

execute "DROP TABLE #{:table_name} CASCADE"

您可以在此处查看内置方法drop_table的文档。


1
这适用于MySQL,但是对于PostgreSQL,语法略有不同:执行“DROP TABLE #{:table_name} CASCADE”。 - l3x

2

在您的initializers目录中放置一个名为postgres.rb的文件,然后进行操作。无论如何,这对于rails4.1是有效的。

module ActiveRecord
    module ConnectionAdapters # :nodoc:
        module SchemaStatements
            def drop_table(table_name, options = {})
                execute "DROP TABLE  #{quote_table_name(table_name)} CASCADE"
            end
        end
    end
end

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接