所以,我一直在我的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约会是否会为索引添加适当的约束? 如果有人能告诉我差异,我真的很感激。
答案 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