Rails迁移等效的SQL代码

时间:2013-10-02 19:52:38

标签: sql ruby-on-rails migration equivalent

所以,我一直在我的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

加:   如果这些代码在up方法中,那么mine down方法应该如何?

- 编辑 -

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

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

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

1 个答案:

答案 0 :(得分: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并做正确的事情

要做你想做的事

remove_index:targe_table,:FK