2013-09-29 68 views
3

我有遷移(創建歸途),我需要改變,它的下面:修改特定遷移

20130923000732_create_questions.rb 

我需要改變

t.string to --> t.text 

我怎麼能做到這一點?

我讀過,我可以創建一個新的遷移重命名列,但我不太明白。

回答

4

你的應用程序還在開發中,j在edtor中打開該遷移,將其更改爲文本並再次運行所有遷移。 或者編寫一個將更新該字段類型的遷移。

首先在你端子:

rails g migration change_column_type_in_questions 

然後在遷移文件:

class ChangeColumnTypeInQuestions < ActiveRecord::Migration 
    def change 
    change_column :questions, :body, :text 
    end 
end 

遷移將查找表的問題,並會不丟失數據更新列身型。

+0

它似乎與重命名遷移文件一起工作。在最初的create_question遷移中仍然存在t.string,對嗎? –

+0

不,但如果我沒有重要的數據在數據庫中,我只需更改該遷移中的列類型,並將重置數據庫並從零開始構建。當您有需要保留的數據時,使用遷移重命名字段非常有用。 – rmagnum2002

+0

它與遷移工作正常:) –

14

如果20130923000732_create_questions.rb遷移是你最後的遷移,你可以回滾有:

rake db:rollback 

否則,你可以簡單地降低您的使用特定版本的遷移:

rake db:migrate:down VERSION=20130923000732 

回滾遷移後,更改遷移文件並再次遷移。

+0

這是一種向後遷移的方式。我嘗試了rake db:migrate:down方式,但後來所有的遷移都被取消了。你能解釋一下這一步嗎? –

+1

嗯你的情況是不同的。創建新的遷移將解決您的問題。 – xaph

2

運行rails generate migration change_string_to_text_in_questions然後一個新的遷移文件將被創建,與

def change 
    end 

方法,現在將其插入,change_column :table_name, :column_name, :type現在遷移的文件應該是這樣的,

def change 
    change_column :table_name, :column_name,:type 
end 

在此之後,保存變化和運行db:migrate

+0

我的意思是遷移問題的移植的名稱將知道軌道?因爲有很多。 –

+2

您必須指定要在遷移文件中更改的表名稱和列名稱,一旦您遷移更改,它將自動更改。 – ajkumar25