wic*_*ken 15 ruby migration ruby-on-rails
我有一个现有的数据库,我在其中将以前的'NULL'列转换为具有默认值的列(并使用所述默认值填充该列).但是,该值是我需要创建的记录的ID.如果我将此记录放入db/seeds.rb,它将无法运行,因为db/seeds.rb迁移后运行 - 但迁移需要种子数据.如果我将记录创建留在迁移中,那么如果我创建一个新的数据库,我就不会得到记录db:load.除了db/seeds.rb在迁移和迁移中复制这个之外,还有更好的方法吗?
谢谢!
Mat*_*hew 10
虽然我可以理解你想要保持DRY并且不必在migration和seeds.rb中写这个,但我认为你应该在两个地方写它.不只是为了使它工作,而是为了完成与您的问题相关的不同要求.
无论外部进程如何,您都需要确保迁移可以正确执行.这意味着您应该在该特定迁移中放置所需的任何代码.除了确保您的迁移正确执行之外,这不是要做任何事情.假设有人试图迁移而不知道你将部分代码放在seeds.rb中,那么他们很难弄清楚发生了什么.
您可以通过在seeds.rb中包含类似的代码来使db:load正常工作.但是,您应该在seeds.rb中评估数据库的当前状态,因为它在迁移后运行.因此,您可以检查列是否存在,以及默认值是什么等.这意味着如果迁移运行并处理所有事情,seeds.rb不会重复工作或不适当地修改值.但是,如果迁移未按预期设置这些变量,则可以设置值.
我建议将其视为两个独立的问题,这样您就可以更加自信地成功执行彼此独立的每个问题.它还可以为您自己或他人了解未来发生的事情提供更好的可维护性.
在我看来,你应该在db/seeds.rb迁移过程中对待这一点。
迁移用于将现有数据库从旧版本迁移到另一个版本,而seeds.rb和schema.rb用于获取具有最新版本的新数据库。
| 归档时间: |
|
| 查看次数: |
3152 次 |
| 最近记录: |