Rails - 可以在通用rake任务中运行迁移方法吗?

gmo*_*iey 4 migration rake ruby-on-rails

我知道这不是最佳实践,并且很可能甚至不应该使用,因为迁移的用途是什么,但我想知道是否可以在常规rake任务中执行特定于迁移的命令.就像是:

namespace :dummy do
    task :update => :environment do
      add_column :users, :deleted, :boolean, { :null => false, :default => false }
   end
end
Run Code Online (Sandbox Code Playgroud)

谢谢

tad*_*man 6

可以在rake任务中运行任意伪迁移:

namespace :dummy do
  task :update => :environment do
    ActiveRecord::Base.connection.add_column :users, :deleted, :boolean, :null => false, :default => false
  end
end
Run Code Online (Sandbox Code Playgroud)

如果你做了很多这样的事情,请使用简写:

namespace :dummy do
  task :update => :environment do
    c = ActiveRecord::Base.connection

    c.add_column :users, :deleted, :boolean, :null => false, :default => false
  end
end
Run Code Online (Sandbox Code Playgroud)


jpe*_*thy 2

是的,你应该这样做:

namespace :dummy do
  task :update => :enviroment do
    ActiveRecord::Migration.send(:add_column, :users, :deleted, :boolean, { :null => false, :default => false })
  end
end
Run Code Online (Sandbox Code Playgroud)

未经测试,但这里重要的是包含迁移类,然后发送您想要运行的方法。

更新ActiveRecord::Migration为直接通过 @tadman使用