使用rake db:直接迁移,vanilla SQL

时间:2011-02-08 19:55:26

标签: ruby-on-rails rake rails-migrations

使用rake db:migrate加载vanilla SQL会涉及到什么问题?

我正在使用的业务要求不允许我使用默认的Rails迁移。但我仍然需要跟踪更改,轻松更改数据库DDL以及Rails迁移为您提供的其他内容。

因此迁移文件如下所示:

class AddDateToPost < ActiveRecord::Migration
  def self.up
    ActiveRecord::Base.connection.execute("ALTER TABLE `posts` ADD COLUMN date DATETIME NULL")
  end

  def self.down
    ActiveRecord::Base.connection.execute("ALTER TABLE `posts` DROP COLUMN date")
  end
end

2 个答案:

答案 0 :(得分:17)

这是完全可以接受的,并且没有陷阱,只要你确信你的上下功能相互映射。为了便于阅读,我建议您执行以下操作:

class AddDateToPost < ActiveRecord::Migration
  def self.up
    execute "ALTER TABLE `posts` ADD COLUMN date DATETIME NULL"
  end

  def self.down
    execute "ALTER TABLE `posts` DROP COLUMN date"
  end
end

答案 1 :(得分:0)

您可以使用standalone-migrations gem在非rails项目中使用Rails迁移方法。

安装gem后,您可以在Rakefile添加以下行以启用rake db:*任务:

require 'standalone_migrations'
StandaloneMigrations::Tasks.load_tasks

之后,您只需像平常一样设置迁移:

class AddDateToPost < ActiveRecord::Migration
  def self.up
    add_columm :posts, :date, :datetime, default: nil
  end

  def self.down
    remove_columm :posts, :date
  end
end