迁移数据库的介绍和使用方式[Ruby on Rails] [SQL]
创作不易,麻烦点个赞再接着看,谢谢
1迁移概述
迁移是一种以一致的方式随时间改变数据库模式的方便方法。它们使用Ruby DSL,因此您不必手动编写SQL,从而使您的模式和更改独立于数据库。
您可以将每次迁移视为数据库的新“版本”。模式一开始没有任何内容,每次迁移都会对其进行修改,以添加或删除表、列或条目。Active Record知道如何沿着这个时间线更新您的模式,将其从历史记录中的任何点更新到最新版本。Active Record还将更新您的数据库/模式。rb文件以匹配数据库的最新结构。
2.1创建独立迁移
迁移作为文件存储在db/migrate目录中,每个迁移类对应一个文件。文件名的格式为YYYYMMDDHHMMSS_create_products。rb,即标识迁移的UTC时间戳,后跟下划线,后跟迁移的名称。迁移类的名称(CamelCased版本)应与文件名的后一部分匹配。例如20080906120000_创建_产品。rb应定义CreateProducts类和20080906120001_向_产品添加_详细信息。rb应该定义AddDetailsToProducts。
Rails使用这个时间戳来确定应该运行哪个迁移以及以什么顺序运行,因此,如果要从另一个应用程序复制迁移或自己生成文件,请注意它在顺序中的位置。
当然,计算时间戳并不有趣,所以Active Record提供了一个生成器来处理为您制作时间戳的过程:
bin/rails generate migration AddPartNumberToProducts
这可以自动生产一个空的文件,里面内容是这样的:
class AddPartNumberToProducts < ActiveRecord::Migration[6.0]
def change
add_column :products, :part_number, :string
add_index :products, :part_number
end
end
这个生成器可以做的不仅仅是在文件名上附加一个时间戳。基于命名约定和其他(可选)参数,它还可以开始充实迁移。
如果迁移名称的格式为“AddColumntTable”或“RemoveColumnFromTable”,后面是列名和类型列表,则将创建包含适当的add_column和remove_column语句的迁移。
bin/rails generate migration AddPartNumberToProducts part_number:string
class AddPartNumberToProducts < ActiveRecord::Migration[6.0]
def change
add_column :products, :part_number, :string
end
end
如果想要里面有内容,则输入以下再终端里:
bin/rails generate migration AddPartNumberToProducts part_number:string:index
如果迁移名称的形式为“CreateXXX”,后面是列名和类型列表,则将生成一个迁移,创建表XXX,其中包含列出的列。例如:
bin/rails generate migration CreateProducts name:string part_number:string
class CreateProducts < ActiveRecord::Migration[6.0]
def change
create_table :products do |t|
t.string :name
t.string :part_number
t.timestamps
end
end
end
2.2模型生成器
模型和脚手架生成器将创建适合添加新模型的迁移。此迁移已经包含了创建相关表的说明。如果您告诉Rails您想要什么列,那么也将创建用于添加这些列的语句。例如,运行:
bin/rails generate model Product name:string description:text
将创建一个如下所示的迁移
class CreateProducts < ActiveRecord::Migration[6.0]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
2.3 修改方式
bin/rails generate migration AddDetailsToProducts 'price:decimal{5,2}' supplier:references{polymorphic}
class AddDetailsToProducts < ActiveRecord::Migration[6.0]
def change
add_column :products, :price, :decimal, precision: 5, scale: 2
add_reference :products, :supplier, polymorphic: true
end
end
3编写迁移
一旦您使用其中一个生成器创建了迁移,就可以开始工作了!