2013-07-31 17 views
1

HI我創建了一個Ruby on Rails的遷移文件如下,並在第一個階段,我創建的表Ruby on Rails的如何刪除添加的列,並通過遷移文件中插入新列

然後我要添加列和刪除一些列和我修改如下

class CreateMt940Batches < ActiveRecord::Migration 
    def change 
    create_table :mt940_batches do |t| 
    t.string :account_number 
    t.string :transaction_reference_number 
    t.string :information_to_account_owner 
    t.string :file_name 
    t.binary :raw_data_transaction 
    t.string :sha1_checksum 
    t.timestamps 
    end 

    def self.down 
    remove_column :account_number, :transaction_reference_number, :information_to_account_owner 
    end 

    def self.up 
    add_column :mt940_batches, :created_by, :updated_by, :integer 
    end 
end 
    end 

但是當我跑耙db:遷移什麼也沒有發生。如何完成這項任務。我想從這個遷移文件中更改已創建的模型。嗯,尋找一種方法來做到這一點。預先感謝您

回答

6

您應該將您的刪除/添加列添加到單獨的遷移文件中。

class FooMigration < ActiveRecord::Migration 
    def down 
    remove_column :account_number, :transaction_reference_number, :information_to_account_owner 
    end 

    def up 
    add_column :mt940_batches, :created_by, :updated_by, :integer 
    end 
end 

請注意,您的updown方法應該是同上有效。撥打rake db:migrate:downrake db:migrate:up時,您應該能夠從一個到另一個。這裏不是這種情況。

但是,在這裏,您似乎希望在單個遷移中實現2個不同的事情。如果你想添加和刪除列,考慮將每一個在不同的遷移文件:

請了解更多詳情

你最終會與2遷移閱讀here文件是這樣的:

class RemoveFieldsFromMt940Batches < ActiveRecord::Migration 
    def change 
    remove_column :mt940_batches, :account_number, :transaction_reference_number, :information_to_account_owner 
    end 
end 

class AddFieldsToMt940Batches < ActiveRecord::Migration 
    def change 
    add_column :mt940_batches, :created_by, :updated_by, :integer 
    end 
end 
1

因爲此遷移已經執行。你必須生成添加和在表列刪除一個新的遷移,也就是說你想從你的表中刪除FILE_NAME:

運行以下命令:

rails g migration RemoveFileNameFromCreateMt940Batches file_name:string 

重新生成列:

rails g migration AddFileNameToCreateMt940Batches file_name:string 

比運行rake db:migrate它將刪除列並再次添加列到您的表。

希望它會有所幫助。謝謝。

1

創建與刪除列的列表另一個遷移文件

def change 
remove_column :account_number, :transaction_reference_number, :information_to_account_owner 
end 

創建添加的列清單

def change 
add_column :mt940_batches, :created_by, :updated_by, :integer 
end 

一個遷移文件不要改變創建表的遷移文件。其他明智data saved in the file will be lost.

如果data lost是不是對你很重要,那麼就用耙子db:migrate:down version=<your migration file version>

刪除表和更改遷移文件 然後運行

db:migrate:up version=<your migration file version> 
2

不要編輯它,如果這個遷移已經在生產env中執行而不是創建新的 如果不是,則可以使用rake db:rollback,rollback migrations

相關問題