一、迁移是啥?
当我们使用rake db:migrate时,就是在使用迁移了
迁移是ActiveRecord的一个特性,允许我们按照时间顺序管理数据库模式。
二、迁移有啥用?
有了迁移,我们不必再用纯SQL来修改数据库模式,而是可以使用简单的Ruby DSL来描述对数据库表的修改。
三、怎么用?
一开始数据库模式并不包含任何内容,之后通过一个个迁移来添加或删除数据库表、字段和记录。
1、创建独立的迁移
比如:
class CreateProducts < ActiveRecord::Migration[5.0]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
这个迁移字段用于添加数据库表、数据库表中包含name、description字段,同时隐藏添加了id主键字段,这是所有Active Record模型的默认主键。
timestampes宏添加了created_at和updated_at两个字段。这三个字段都是Active Record自动管理。
这也解释了为什么我们没有添加id字段,而会自动出现在数据库中了。
迁移文件存储在db/migrate文件夹中,一个迁移文件包含一个迁移类,文件名采用YYYYMMDDHHMMSS_create_products.rb,文件的名称应该对应迁移类的名称(驼峰式)。
如果想增加字段可以使用下面这个命令:
rails generate migration AddPartNumberToProducts
references字段,用法:
rails generate migration AddUserRefToProducts user:references
这行命令可以生成
class AddUserRefToProducts < ActiveRecord::Migration[5.0]
def
add_reference :product, :user, index: true, foreign_key: true
end
end
2、使用changes方法
changes方法是目前最常用的,在大多数情况下,Active Record知道如何自动撤销用change方法编写的迁移,目前只能使用下列方法:
add_column
add_foreign_key
add_index
add_reference
add_timestampes
change_column_default
change_column_null
create_join_table
create_table
disable_extension
drop_join_table
drop_table(必须提供块)
enable_extension
remove_column(必须提供字段类型)
remove_foreign_key(必须提供第二个数据表) ▪ remove_index
remove_reference
remove_timestamps
rename_column
rename_index
rename_table
如果不使用change、change_default和remove方法,那么change_table方法也是可以撤销的
网友评论