向表中添加新列时,是应该创建新迁移还是编辑旧迁移?

Rup*_*ott 11 migration ruby-on-rails-3

如果我创建一个表rails generate migration,我可以稍后通过创建一个新的迁移添加一个额外的列.我还可以回滚原始迁移,然后编辑它以包含额外列.

方法1:新迁移

//Create the model including the migration
$ rails generate model Foo bar:string

//Perform the migration
$ rake db:migrate

//Create the add column migration
$ rails generate migration add_foobar_to_foos foobar:string

//Perform the new migration
$ rake db:migrate
Run Code Online (Sandbox Code Playgroud)

方法2:回滚

//Create the model including the migration
$ rails generate model Foo bar:string

//Perform the migration
$ rake db:migrate

//Rollback the migration
$ rake db:rollback

//Edit the original migration file

//Perform the new migration
$ rake db:migrate
Run Code Online (Sandbox Code Playgroud)

完成此任务的正确/最佳方法是什么?为什么?

dda*_*yan 13

生病的方法1.为什么?因为如果其他开发人员/机器正在使用此环境,您可能会因为他们可能需要在正确的时间回滚以维护正确的数据库结构而获得不稳定的状态.

  • 这是完全正确的.如果您改变现有的迁移,其他开发人员需要将其拉入并运行那些棘手的混蛋命令以使其达到与您相同的状态,或者更糟糕的是运行`rake db:schema:load`.如果你已经提交了迁移,它应该*永远不会改变. (2认同)