0

我的問題很簡單。我創建了這個遷移文件,我的移動列沒有改變,但創建了def change。是否因爲導軌被忽略def updef down?如果是的話爲什麼遷移步驟變化,上下

def change 
    add_column :posts, :address, :string 
end 


def up 
execute 'ALTER TABLE posts ALTER COLUMN mobile TYPE integer USING (mobile::integer)' 
end 

def down 
    execute 'ALTER TABLE posts ALTER COLUMN mobile TYPE text USING (mobile::text)' 

end 

回答

0

Rails將不會同時運行設計中的更改和更新方法,因此忽略更改方法後的所有內容。當你需要運行一些特定的邏輯時,比如你的Up和Down方法,你有兩種選擇。您可以將變更方法中的內容放入上下方法中,也可以將Up和Down內容放入更改方法中。如果你想這樣做「Rails4」的方式,你應該使用changereversible方法來得到你需要的:

class SomeMigration < ActiveRecord::Migration 

def change 
    add_column :posts, :address, :string 

    reversible do |change| 
     change.up do 
     execute 'ALTER TABLE posts ALTER COLUMN mobile TYPE integer USING (mobile::integer)' 
     end 

     change.down do 
     execute 'ALTER TABLE posts ALTER COLUMN mobile TYPE text USING (mobile::text)' 
     end 
    end 
    end