每个迁移的任务有一个世界协调(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 def self.upenddef self.downendend类名 必须和 文件名 中版本号后面的部分相同 。 上面的类应该对应 20101105162228_some_meaningful_name.rb文件中字段类型add_column 包括:string :binary :boolean : date : datateime :decimal :float : integer :text : time : 09-04 08:24