2.2 建立一个独立的 Migration
若你建立 migration,不是为了新增 Model,而是为了其他目的(比方说,在现有数据库表中新增一个字段),那可以只用 migration generator(数据库迁移生成器)来做:
rails generate migration AddPartNumberToProducts
这样会建立一个空的、但已命名好的 migration:
class AddPartNumberToProducts < ActiveRecord::Migration
def self.up
end
def self.down
end
end
把 migration 的名称,取做「AddXXXToYYY」、「RemoveXXXFromYYY」这类的格式,后面再接上一串栏名/栏类型的清单,这样的话,这个 migration 就会含有对应的 add_column 和 remove_column 叙述。
rails generate migration AddPartNumberToProducts part_number:string
会产生出:
class AddPartNumberToProducts < ActiveRecord::Migration
def self.up
add_column :products, :part_number, :string
end
def self.down
remove_column :products, :part_number
end
end
同理,
rails generate migration RemovePartNumberFromProducts part_number:string
则产生出:
class RemovePartNumberFromProducts < ActiveRecord::Migration
def self.up
remove_column :products, :part_number
end
def self.down
add_column :products, :part_number, :string
end
end
这个技巧,可以产生不只一栏,像是:
rails generate migration AddDetailsToProducts part_number:string price:decimal
就可以产生出:
class AddDetailsToProducts < ActiveRecord::Migration
def self.up
add_column :products, :part_number, :string add_column :products, :price, :decimal
end
def self.down
remove_column :products, :price remove_column :products, :part_number
end
end
这些自动产生的东西,只是个起点,你可以增删修改,直到满意为止。