每个迁移的任务有一个世界协调(UTC)的时间戳。
Rails会记住每一次作用于数据库的迁移任务的版本号,当你要求使用新的迁移任务更新数据结构的时候,它将可用的迁移任务版本号与schema_migrations表中的版本号进行对比,如果发现schema_migrations表中没有版本号,就会根据顺序逐步实施。
如何恢复数据库结构呢? good querstion
为了解决这个问题,迁移任务是可逆的,每个迁移任务实际上是包含2组命令
1. 告诉Rails如何修改数据库
2. 告诉Rails如何撤销这些修改
运行db:migrate这个rake任务就可以运行迁移任务:
为了了解一起,先看看rails内部结构
在每个Rails数据库里,迁移任务会维护一张名为schema_migrations的表,其中只有version这么一个字段,每个成功实施一次迁移任务就会对应一条记录,当运行db:migrate时候,首先检查schema_migrations表,如果这张表存在,则创建。然后去查看db/migrate目录下的所有迁移任务文件。如果默写迁移任务版本号(也就是文件名以数字)不在数据库中,那么就依次执行这些任务,使他们作用于数据库,每次迁移完成后,schema_migrations表中会加一条存放版本号的记录
要编写迁移任务,只要继承 ActiveRecord:Migration即可。 包含up()和down()
class SomeMeaningfulName < ActiveRecord::Migration
def self.up
end
def self.down
end
end
类名 必须和 文件名 中版本号后面的部分相同 。
上面的类应该对应 20101105162228_some_meaningful_name.rb文件中
字段类型
add_column 包括:string :binary :boolean : date : datateime :decimal :float : integer :text : time :
阅读(2075) | 评论(0) | 转发(0) |