6

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
4

2 回答 2

17

这是完全可以接受的,并且没有任何问题,只要您确信自己的 up 和 down 功能相互反映即可。为了可读性,我建议执行以下操作:

类 AddDateToPost < ActiveRecord::Migration
  def self.up
    执行“ALTER TABLE `posts` ADD COLUMN date DATETIME NULL”
  结尾

  def self.down
    执行“ALTER TABLE `posts` DROP COLUMN date”
  结尾
结尾
于 2011-02-08T20:12:08.523 回答
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
于 2014-05-19T15:03:50.497 回答