Ruby on rails 如何使用迁移

Ruby on rails 如何使用迁移,ruby-on-rails,laravel,Ruby On Rails,Laravel,就在几周前,我开始使用Laravel(我添加了RoR作为标记,因为我知道两者之间的迁移有点类似),现在仍然在努力适应迁移。我曾尝试阅读一些文档和教程(针对Laravel和其他使用它们的框架,如Rails),它们通常都能很好地解释如何使用它们,但我仍然无法掌握如何有效地使用它们。我有一些问题: 如果我在视图中创建了一个表,然后决定添加一些列,或者删除一些其他列,我该怎么做?我知道编辑现有迁移不是正确的方法。我是否要添加一个新的迁移来添加新列并删除旧列?如果是这样的话,他们是否有命名约定,比如在创建

就在几周前,我开始使用Laravel(我添加了RoR作为标记,因为我知道两者之间的迁移有点类似),现在仍然在努力适应迁移。我曾尝试阅读一些文档和教程(针对Laravel和其他使用它们的框架,如Rails),它们通常都能很好地解释如何使用它们,但我仍然无法掌握如何有效地使用它们。我有一些问题:

  • 如果我在视图中创建了一个表,然后决定添加一些列,或者删除一些其他列,我该怎么做?我知道编辑现有迁移不是正确的方法。我是否要添加一个新的迁移来添加新列并删除旧列?如果是这样的话,他们是否有命名约定,比如在创建一个名为users的表时,所有教程通常都会将迁移命名为create\u users,我是否将此迁移命名为update\u users?如果我想对用户进行另一次更新,那么我将拥有两个名为update\u users的类。另外,这种方法存在的问题是,我觉得我对数据库结构没有很好的了解,表列可能分散在十几个迁移文件中

  • 如果我想用测试数据填充我的表,像Laravel4中的种子一样,在单独的迁移中这样做是否更好

  • 我应该在每次迁移中只有一个表吗?众所周知,在我的create_users迁移中,我创建了三个表;用户、角色和角色用户,将它们分别迁移是否更好

  • 编辑现有迁移不是一条可行之路。否则,在部署到生产系统时将不会使用更改(迁移号存储在数据库中,以避免再次运行它们)。添加另一个迁移以进行更改。更新/更改迁移没有真正的命名约定。所以,按你想要的方式命名。但是,一个专有名称可以指出您进行迁移的原因,这可能会有所帮助(例如AddCommentsToUsers)

  • Rails具有播种机制(请参见)。你应该用这个。数据迁移有其缺点

  • 我喜欢每次迁移一张桌子。如果第一个表创建完成了,但第二个表创建没有完成,那么稍后当您尝试重新运行迁移时(在修复了迁移的任何问题之后),就会遇到麻烦


  • 谢谢,我觉得这回答了我的大部分问题。但是,我没有使用Rails,而是使用PHP框架Laravel(类似的迁移),Laravel还不支持种子,下一个版本将支持种子,但它刚刚作为beta版发布,所以我还没有进行切换。但我想我还是应该使用单独的迁移来填充表中的测试数据?嗯,我有时使用数据迁移,并将所有数据都放在其中。但我确保,我可以使用find_或create或类似的机制(仅在不可用时创建)随时运行迁移。