2013-10-02 90 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方法? –