Rails中的Migrations(一)

本文介绍了Rails框架中的数据库迁移机制,包括如何使用Rails自动生成迁移文件、迁移文件的命名规则及执行流程。此外还讲解了如何利用rake任务来执行特定的迁移文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Rails中的DB Migration是通过db/migrate下的rb脚本来完成的。这些migrate的脚本可以通过手动来维护,但是推荐的方法应该让Rails自己来生成相应的rb文件。在Rails中有两种方式来生成:

   1. 使用generator生成model时,同时生成对应这个model的migrate文件。例如:ruby script/generate model discount。(如果使用--skip-migration的选项则不会生成相应的migrate文件)
   2. 直接使用generator来生成migrate文件,例如:ruby script/generate migration add_price_column。
migrate 文件的名称有14位的数字开头,即所谓的UTC时间(起首4位数字表示年份,然后以5组2位数字分别表示月份,日期,小时,分钟,秒数)加下划线,加上这个文件中使用的类的名称。类名称中的单词以下划线分隔。如果该migrate文件是由generate model产生的,则名称为create_加上model的复数形式。如果是由generator直接产生的则以generate命令后的参数决定。(例如:ruby script/generate migration add_price_column中产生的名称就为add_price_column)。

 

rake db:migrate

 

Rails在数据库中会维护一张 表:schema_migrations。这张表中只有一个字段:version,里面存储的是db/migrate目录下的已经成功执行的 migrate的文件的UTC编号。当执行rake db:migrate是,Rails会查看数据库中有没有schema_migrations这张表,如果没有就会建立这张表.然后会取出这张表中的所有 的记录,即UTC编号,与db/migrate目录下的文件进行比较.如果db/migrate目录下存在数据库中没有记录的migrate文件,就会按 照顺序进行执行,并在数据库中插入相应的记录.

执行某个特定的migrate文件

 

如果需要执行db/migrate目录下的某个特定的migrate文件,可以使用VERSION参数,例如rake db:migrate VERSION=20080601000010
如果使用VERSION执行某个特定的migrate文件时,Rasil会按照以下的顺序进行工作:
当指定的VERSION参数比schema_migrations表中存储的最大UTC还要大,则会直接执行制定VERSION的那个migrate文件.
当指定的VERSION参数比schema_migrations表中存储的某些记录小,情况则会有些不同.Rails会从数据库中找出那些UTC编号比制定VERSION大的那些记录,并按照UTC编号从大到小 undo 这些migrate文件.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值