2016-11-14 104 views
1

我目前正在開發Rails 4應用程序,並且在過去幾個月中我收集了大量獨特的遷移文件,這些文件可以反轉它們自己的更改等。
由於我沒有在這個開發階段重置數據庫的問題,我想我可能會清理一下這個混亂。

是否有重做所有遷移文件的方法,同時還允許刪除某些遷移文件並擴展其他文件?Rails 4:將所有遷移重新遷移到Schema

我很欣賞每個答案!


實施例(編輯)

我有兩個遷移文件:

  1. 20160911071103_create_items.rb
  2. 20160918085621_add_cached_votes_to_items.rb

兩者都已遷移。前

class CreateItems < ActiveRecord::Migration 
    def change 
    create_table :items do |t| 

     t.integer :user_id 

     t.timestamps null: false 
    end 
    end 
end 

我的目標<

一號文件將包括由第二個文件直接在第一個文件並刪除第二所添加的列。

一號文件作爲你的意思是你後

class CreateItems < ActiveRecord::Migration 
    def change 
    create_table :items do |t| 

     t.integer :user_id 
     t.integer :cached_votes 

     t.timestamps null: false 
    end 
    end 
end 
+0

不知道您重做所有遷移文件**的含義是什麼?你可以給你的應用程序的實例,我認爲這會更有意義! – dp7

+0

@dkp增加了一個例子 – Gugubaight

+0

'rake db:reset' – jamesjaya

回答

1

你需要運行

rake db:migrate:down VERSION=20160918085621

rake db:migrate:down VERSION=20160911071103

您現在可以通過rake db:migrate:status檢查遷移狀態,你應該希望得到遷移狀態如下:

down 20160911071103 
down 20160918085621 

現在,你可以刪除遷移文件20160918085621_add_cached_votes_to_items.rb

&編輯遷移文件20160911071103_create_items.rb,因爲你需要。

而且,最後運行:

rake db:migrate:up VERSION=20160911071103

+0

謝謝,這個原理的作品! – Gugubaight

0

它在發展只有這樣你就可以更改遷移的文件。

注意:不建議編輯您的遷移,但不要在任何地方部署,因此您可以這樣做。

20160911071103_create_items.rb

class CreateItems < ActiveRecord::Migration 
    def change 
    create_table :items do |t| 

     t.integer :user_id 

     t.timestamps null: false 
    end 
    end 
end 

20160918085621_add_cached_votes_to_items.rb

class AddCachedVotesToItems < ActiveRecord::Migration 
    def change 
    add_column :items, :cached_votes, :integer 
    end 
end 

修改你的第一個遷移和記得刪除第二個遷移。

20160911071103_create_items。RB(遷移1 +遷移2)

class CreateItems < ActiveRecord::Migration 
    def change 
    create_table :items do |t| 

     t.integer :user_id 
     t.integer :cached_votes 

     t.timestamps null: false 
    end 
    end 
end 

然後DropMigrate再次

rake db:drop # Drop the db 

rake db:setup # Create and migrate the db 
0

,如果你有一個工作schema.rb文件。你可以生成一個遷移文件

bundle exec rails generate migration CreateItemsNew

然後從你的工作schema.rb這個新生成的遷移文件填寫代碼塊create_table "items"。然後對db/migrate中的所有遷移進行批量搜索,這些遷移將更改表items並刪除這些文件。通過這種方式,您將擁有一個用於數據庫中表的單個遷移文件。