繁体   English   中英

加载rails迁移的种子数据

[英]loading seed data for a rails migration

我有一个现有的数据库,我在其中将以前的'NULL'列转换为具有默认值的列(并使用所述默认值填充该列)。 但是,该值是我需要创建的记录的ID。 如果我将此记录放在db/seeds.rb ,它将无法运行,因为db/seeds.rb在迁移后运行 - 但迁移需要种子数据。 如果我将记录创建留在迁移中,那么如果我用db:load创建一个新的数据库,我就不会得到记录。 除了在db/seeds.rb和迁移中复制这个之外,还有更好的方法吗?

谢谢!

虽然我可以理解你想要保持DRY并且不必在migration和seeds.rb中写这个,但我认为你应该在两个地方写它。 不只是为了使它工作,而是为了完成与您的问题相关的不同要求。

  1. 无论外部进程如何,您都需要确保迁移可以正确执行。 这意味着您应该在该特定迁移中放置所需的任何代码。 除了确保您的迁移正确执行之外,这不是为了完成任何事情。 假设有人试图迁移而不知道你将部分代码放在seeds.rb中,那么他们很难弄清楚发生了什么。

  2. 您可以通过在seeds.rb中包含类似的代码来使db:load正常工作。 但是,您应该在seeds.rb中评估数据库的当前状态,因为它在迁移后运行。 因此,您可以检查列是否存在,以及默认值是什么等。这意味着如果迁移运行并处理所有事情,seeds.rb不会重复工作或不适当地修改值。 但是,如果迁移未按预期设置这些变量,则可以设置值。

我建议将其视为两个独立的问题,这样您就可以更加自信地成功执行彼此独立的每个问题。 它还可以为您自己或他人了解未来发生的事情提供更好的可维护性。

在我看来,你应该在db/seeds.rb和迁移中对待它。

迁移用于将现有数据库从旧版本获取到另一个版本,而seeds.rbschema.rb用于具有最新版本的新数据库。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM