2010-10-16 19 views
47

我需要從我已經創建的軌道模型中刪除幾列,並在該模型中有一些行條目。 如何做到這一點?任何具有在rails中修改模式細節的鏈接? 我使用軌道版本3.如何從我的Rails模型中刪除列?

回答

52

要刪除的數據庫列,你必須生成一個遷移:

script/rails g migration RemoveColumns 

然後在self.up類方法,刪除您的列:

def self.up 
    remove_column :table_name, :column_name 
end 

您可能希望將其添加回到self.down類方法,以及:

def self.down 
    add_column :table_name, :column_name, :type 
end 

Rails Guide爲此更詳細。

+3

您不必使用Rails指定'腳本/ rails' 3.'軌摹遷移RemoveColumns'就足夠了。 – vonconrad 2010-10-16 12:35:12

41

如果你知道你想刪除的列,你可以使用約定:刪除..從...命名你的遷移時。另外,您可以在運行遷移命令時包含列名。

該命令的形式:

rails g migration Remove..From.. col1:type col2:type col3:type 

例如:

rails g migration RemoveProjectIDFromProjects project_id:string 

生成以下遷移文件:

class RemoveProjectIdFromProjects < ActiveRecord::Migration 
    def self.up 
    remove_column :projects, :project_id 
    end 

    def self.down 
    add_column :projects, :project_id, :string 
    end 
end 
+2

Rails 4做了這個改變嗎?當我嘗試使用你的例子時,它只產生了一個改變方法(沒有up/down方法)。 – Dan 2014-01-15 21:19:34

+0

@丹 - 也許。我沒有在4試過。3是我最後一次嘗試這個。我今晚晚些時候再看看並報告。 – slm 2014-01-15 21:25:11

+2

經過多一點研究後,它看起來應該只是Rails 4中的一種改變方法。remove_column現在需要一種數據類型,它必須是它如何處理添加列的方式。 – Dan 2014-01-15 21:31:51

3

通過命令選擇,因爲Add,只改變AddRemove

單柱:

rails g migration RemoveColumnFromTable column:type 

多列:

rails g migration RemoveColumn1AndColumn2FromTable column1:type colummn2:type