我知道这不是最佳做法,很可能甚至不应该使用,因为迁移的用途是什么,但我想知道是否可以在常规rake任务中执行特定于迁移的命令。类似的东西:
namespace :dummy do
task :update => :environment do
add_column :users, :deleted, :boolean, { :null => false, :default => false }
end
end
由于
答案 0 :(得分:6)
可以在rake任务中运行任意伪迁移:
namespace :dummy do
task :update => :environment do
ActiveRecord::Base.connection.add_column :users, :deleted, :boolean, :null => false, :default => false
end
end
如果你做了很多这样的事情,请使用简写:
namespace :dummy do
task :update => :environment do
c = ActiveRecord::Base.connection
c.add_column :users, :deleted, :boolean, :null => false, :default => false
end
end
答案 1 :(得分:2)
是的,你应该这样做:
namespace :dummy do
task :update => :enviroment do
ActiveRecord::Migration.send(:add_column, :users, :deleted, :boolean, { :null => false, :default => false })
end
end
未经测试,但重要的是包含迁移类,然后发送您希望运行的方法。
更新直接通过@tadman使用ActiveRecord::Migration