Rails迁移问题

时间:2009-08-03 12:38:27

标签: ruby-on-rails ruby migration rake

我的Rails应用程序中有4个相关的迁移:

前3个迁移在self.up中创建一个表,并将它们放在各自的self.down方法中。

第4次迁移运行一个rake任务,将数据加载到所有三个(在self.up中)。我想在本次迁移的self.down中放入什么来删除3个表中的行?

我做错了吗?可能应该创建一个迁移,我创建3个表并在self.up中加载数据,然后在self.down方法中删除所有三个表?

2 个答案:

答案 0 :(得分:5)

这是错的!

迁移仅应用于迁移数据 模型 ,而不是 数据

Rails 2.3.4添加了“种子”。这是db / seeds中的文件.rb包含用于“引导”数据库的ruby代码。这是为数据库创建半静态内容的好方法,例如类别,查找表或用户帐户。

然后,您可以使用简单的rake任务

加载种子数据
rake db:seed

答案 1 :(得分:3)

实际上没有正确或错误的方法。根据您的工作,第4次迁移应该只在其down方法中卸载数据。每个向下只应撤消向上的动作。

当然不需要在创建表的迁移中加载数据。如果您有3个表创建has_many或belongs_to关系,那么将数据放在单独的迁移中是有意义的,这样您就可以创建关系,然后在数据加载中使用它们。

除此之外,如果您有一个rake任务来加载数据,为什么还要为运行该rake任务的迁移而烦恼呢?只需运行安装的rake任务部分,或者只使用rake任务加载或卸载一些演示数据。

通常我会将我的迁移模式集中在一起,并且我会将任何数据加载到我独立调用的rake任务中。