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

发布于 2024-09-12 01:19:44 字数 273 浏览 3 评论 0原文

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

namespace :dummy do
    task :update => :environment do
      add_column :users, :deleted, :boolean, { :null => false, :default => false }
   end
end

谢谢

I know this is not best practice, and most likely shouldn't even be used, as thats what migrations are used for, but I was wondering if its possible to execute migration specific commands in a regular rake task. Something like:

namespace :dummy do
    task :update => :environment do
      add_column :users, :deleted, :boolean, { :null => false, :default => false }
   end
end

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

浅唱ヾ落雨殇 2024-09-19 01:19:44

可以在你的 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

It is possible to run arbitrary pseudo-migrations in your rake tasks:

namespace :dummy do
  task :update => :environment do
    ActiveRecord::Base.connection.add_column :users, :deleted, :boolean, :null => false, :default => false
  end
end

If you're doing a lot of that sort of thing, use short-hand:

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

    c.add_column :users, :deleted, :boolean, :null => false, :default => false
  end
end
叹沉浮 2024-09-19 01:19:44

是的,您应该这样做:

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

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

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

Yes, you should do something like this:

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

Not tested, but the important thing here is to include the migration class and then send the method you wish to run.

UPDATED to use ActiveRecord::Migration directly via @tadman

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文