使用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
答案 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