1

所以,我一直在我的 rails 迁移中使用这段代码:

    add_column :target_table, :FK, :integer

    execute <<-SQL
      ALTER TABLE target_table
      ADD CONSTRAINT constraint FOREIGN KEY (FK)
      REFERENCES some_table (id)
      ON UPDATE CASCADE ON DELETE RESTRICT
    SQL

作为任何优秀的程序员,我想让事情尽可能简短和快速。

我是这种语言的新手,想知道下面的代码是否等同于我的 SQL(在所有方面)。

    add_column :target_table, :FK, :integer, null: false
    add_index  :targe_table,  :FK

PLUS:如果这些代码在 up 方法中,我的 down 方法应该是什么样子?

- 编辑 -

我做了一些研究并阅读了第三种方法:

    add_column :target_table, :FK, :integer, null: false, references: some_table

这些都是等价的吗?rails 约定会为索引添加适当的约束吗?如果有人能告诉我这些差异,我将不胜感激。

4

1 回答 1

1

有类似的问题

execute <<-SQL
      ALTER TABLE target_table
      ADD CONSTRAINT constraint FOREIGN KEY (FK)
      REFERENCES some_table (id)
      ON UPDATE CASCADE ON DELETE RESTRICT
    SQL

在您的迁移文件上,您现在被 SQL 或您当前使用的特定 SQL 风格所困。就像你说的那样正确的做法是

add_index  :targe_table,  :FK

这样,rails 魔术就会知道你在哪里使用什么风格的 SQL 并做正确的事情

做一个你会做的事

删除索引:目标表,:FK

于 2013-10-02T20:00:36.743 回答