Rails - 从模型生成迁移脚本

Kar*_*ran 10 migration ruby-on-rails

我正在学习rails,我遇到了迁移.似乎每次我想编辑模型时,我都需要添加一个迁移脚本,即使我尚未投入生产.

您是否可以编辑模型,添加所需的所有属性,并在发布之前自动生成迁移脚本?

谢谢!

Gre*_*reg 5

如果您使用 rails 3+,您可能需要考虑 DataMapper 而不是 ActiveRecord。它允许您在模型中定义数据模型而不是多个迁移文件。据我了解,DataMapper 允许您从更改中生成迁移。

这是在更广泛的 ORM 社区中经常使用的一种久经考验且值得信赖的模式。


Tom*_*son 3

我同意到目前为止的评论。迁移的想法是,当您想要添加新字段时,可以轻松地流畅地调整数据模式以适应您的应用程序。这是一个简单而美丽的系统。

所以是的,您可以(并且应该)使用rails generate migration...,因为这不仅在许多常见情况下生成正确的代码,而且还跟踪在不同版本的数据库中运行了哪些迁移。请参阅http://guides.rubyonrails.org/migrations.html#creating-a-migration

常见的工作流程可能是这样的:

  • 创建一个新模型,例如 User ,其中包含first_name、last_name、user_name等字段
  • 这将创建一个关联的迁移,您可以使用它来运行bundle exec rake db:migrate- 您的数据库架构将被更新
  • 您决定需要其他信息,例如生日,因此运行rails generate migration AddBirthdateToUser birthdate:date. 对于一些简单的操作,如添加列、索引等,会生成完整的迁移代码;在其他情况下,您需要编写迁移。完成后,运行迁移。
  • 如果您在开发中发现问题,例如字段类型应该是浮点数而不是整数,或者您忘记添加索引,您可以回滚迁移(bundle exec rake db:rollback),修复迁移并重新运行它。
  • 运行测试(这将运行迁移),当一切在本地正常运行时,签入文件(包括迁移)并部署到 QA 或登台服务器,该服务器拥有自己的数据库副本。
  • rake db:migrate在临时服务器上运行。如果您在一个团队中并且其他开发人员已签入迁移,那么他们也将运行。现在您的代码和数据架构已同步。
  • 重复 :-)

在生产部署期间运行迁移没有任何害处(我非常不同意上面的评论)——您应该接受这样的想法:更改,甚至像这样的更改(在其他环境中可能非常困难)是日常 Rails 的正常部分生活!