我的 Rails 应用中有 4 个相关的迁移:
前 3 次迁移在 self.up 中各创建一个表,并在各自的 self.down 方法中删除它们。
第 4 次迁移运行 rake 任务,将数据加载到所有三个(在 self.up 中)。我正在考虑在此迁移的 self.down 中放入什么来删除 3 个表中的行?
我做错了吗?可能应该创建一个迁移,在其中创建 3 个表并在 self.up 中加载数据,然后在 self.down 方法中删除所有三个表?
我的 Rails 应用中有 4 个相关的迁移:
前 3 次迁移在 self.up 中各创建一个表,并在各自的 self.down 方法中删除它们。
第 4 次迁移运行 rake 任务,将数据加载到所有三个(在 self.up 中)。我正在考虑在此迁移的 self.down 中放入什么来删除 3 个表中的行?
我做错了吗?可能应该创建一个迁移,在其中创建 3 个表并在 self.up 中加载数据,然后在 self.down 方法中删除所有三个表?
这是错误的!
迁移应该仅用于迁移您的数据模型而不是您的数据。
Rails 2.3.4 添加了“种子”。这是 db/seeds.rb 中的一个文件,其中包含用于“引导”数据库的 ruby 代码。这是为您的数据库(如类别、查找表或用户帐户)创建半静态内容的好方法。
然后,您可以使用简单的 rake 任务加载种子数据
rake db:seed
没有真正的正确或错误的方法来做到这一点。根据您所做的,第四次迁移应该只是在 down 方法中卸载数据。每次向下应该只撤消向上的动作。
在创建表的迁移中加载数据当然不是必需的。如果您有 3 个创建 has_many 或 belongs_to 关系的表,那么将数据放在单独的迁移中是有意义的,这样您就可以创建关系,然后在数据加载中使用它们。
除此之外,如果您有一个 rake 任务来加载数据,为什么还要为运行该 rake 任务的迁移而烦恼呢?只需将运行 rake 任务作为安装的一部分,或者仅使用 rake 任务加载或卸载一些演示数据。
通常,我会专注于迁移模式,并将任何数据加载放在我独立调用的 rake 任务中。