2013-10-02 93 views
1

所以,我一直在使用这一段代码我迁移内侧扶手:Rails的迁移相当于SQL代码

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: 如果这些代码在里面向上的方法,应该怎么雷倒方法是什么样子?

- 编辑 -

我做了一些研究和了解这样做的第三条道路:

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

那些是所有相同呢?轨道约定是否会为索引添加适当的约束? 我真的很感激,如果有人能告诉我的差异。

回答

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 

该方式的轨道魔术会知道你在哪里使用什么味道SQL和做正确的事

做下来,你会做

remove_index:targe_table,:FK

+0

嗯所以基本上轨道的方式来做它更通用的权利,但它会产生完全相同的结果? 我会不会添加一个remove_column调用down方法? –