2011-09-02 134 views

回答

58

這將允許您無需重新加載整個Rails環境遷移:

ActiveRecord::Migrator.migrate "db/migrate" 

和回滾:

# 3 is the number of migration to rollback, optional, defaults to 1 
ActiveRecord::Migrator.rollback "db/migrate", 3 
+2

需要注意的是,如果你使用Mongoid,這是相同的:'Mongoid :: Migrator.migrate「DB /遷移」' –

+0

這是完美添加到您的test_helper.rb中的Rails應用 –

+0

收到的錯誤,bash下的ActiveRecord :: Migrator.migrate:command not found ...使用Rails 2.3.18,ruby 1.9.3p551,現在在rails控制檯內執行命令後執行。 –

1

您可以使用%×[命令]

%x[rake db:migrate] 
+1

這樣做的目的不在於等待導軌加載。 – rafamvc

+0

@rafamvc是同意的!這就是爲什麼我認爲Benoit的答案更好:) – dexter

0

我在運行遷移的.irbrc文件中創建了一個方法,然後重新加載控制檯:

def migrate 
    if defined? Rails::Console # turn off info logging for Rails 3 
    old_log_level = ActiveRecord::Base.logger.try(:sev_threshold) 
    ActiveRecord::Base.logger.sev_threshold = Logger::WARN 
    end 
    reload! && migations_ran = true if ActiveRecord::Migrator.migrate(Rails.root.join("db/migrate")).any? 
    ActiveRecord::Base.logger.sev_threshold = old_log_level if defined? old_log_level 
    migations_ran ||= nil # useful exit status 
end 

看到這裏的整個文件:https://gist.github.com/imme5150/6548368

55

在控制檯:

ActiveRecord::Migration.remove_column :table_name, :column_name 
+0

完美運行遷移命令。謝謝。 –

+1

完成此操作後,您需要手動更新模式。 –

+0

@WestonGanger怎麼樣? – nruth

10

,我覺得更整潔,只是運行從控制檯部分轉移命令的另一種方法是這樣的:

ActiveRecord::Schema.define do 
    create_table :foo do |t| 
    t.string :bar 
    t.timestamps 
    end 
end 

這樣做的好處是塊內的內容與只是複製和粘貼隨機內容兼容從一個真實的遷移文件/ schema.rb