Mysql Rails和引用完整性

Mysql Rails和引用完整性,mysql,sql,ruby-on-rails,referential-integrity,Mysql,Sql,Ruby On Rails,Referential Integrity,我想知道是否可以编写迁移而不是以下原始SQL语句: execute <<-SQL ALTER TABLE records ADD CONSTRAINT fk_records_domains FOREIGN KEY (domain_id) REFERENCES domains(id) ON DELETE CASCADE SQL 根据以下命令执行: 活动记录方式声称智能属于您的模型,而不是数据库。因此,诸如触发器或外键约束之类的特性并没有被大量使用,这些特性

我想知道是否可以编写迁移而不是以下原始SQL语句:

execute <<-SQL
  ALTER TABLE records
    ADD CONSTRAINT fk_records_domains
    FOREIGN KEY (domain_id)
    REFERENCES domains(id) ON DELETE CASCADE
SQL
根据以下命令执行:

活动记录方式声称智能属于您的模型,而不是数据库。因此,诸如触发器或外键约束之类的特性并没有被大量使用,这些特性将一些智能推回到数据库中

尽管Active Record不提供任何工具来直接使用这些功能,但execute方法可用于执行任意SQL。您还可以使用一些插件,比如将外键支持添加到活动记录中(包括在db/schema.rb中转储外键的支持)

外国人的
添加外键
删除外键
可能会按照你的要求做,但我没有任何直接的经验。

根据:

活动记录方式声称智能属于您的模型,而不是数据库。因此,诸如触发器或外键约束之类的特性并没有被大量使用,这些特性将一些智能推回到数据库中

尽管Active Record不提供任何工具来直接使用这些功能,但execute方法可用于执行任意SQL。您还可以使用一些插件,比如将外键支持添加到活动记录中(包括在db/schema.rb中转储外键的支持)


外国人的
添加外键
删除外键
可能会满足您的要求,但我没有任何直接的经验。

对于任何正在寻找解决方案的人,这里是迁移和回滚工作的示例:

  def up
    change_table :records do |t|
        t.foreign_key :domains, :dependent => :delete
    end
    change_table :cryptokeys do |t|
        t.foreign_key :domains, :dependent => :delete
    end
    change_table :domainmetadata do |t|
        t.foreign_key :domains, :dependent => :delete
    end

  end

  def down
    change_table :records do |t|
        t.remove_foreign_key :domains
    end
    change_table :cryptokeys do |t|
        t.remove_foreign_key :domains
    end
    change_table :domainmetadata do |t|
        t.remove_foreign_key :domains
    end
  end

对于任何正在寻找解决方案示例的人来说,这就是迁移及其回滚工作:

  def up
    change_table :records do |t|
        t.foreign_key :domains, :dependent => :delete
    end
    change_table :cryptokeys do |t|
        t.foreign_key :domains, :dependent => :delete
    end
    change_table :domainmetadata do |t|
        t.foreign_key :domains, :dependent => :delete
    end

  end

  def down
    change_table :records do |t|
        t.remove_foreign_key :domains
    end
    change_table :cryptokeys do |t|
        t.remove_foreign_key :domains
    end
    change_table :domainmetadata do |t|
        t.remove_foreign_key :domains
    end
  end