2009-08-03 165 views
1

我在我的Rails应用程序4相关的迁移:Rails的迁移问题

首先3迁移创建一个表中的每个在self.up和和丢弃它们在各自的self.down方法。

第4次迁移运行一个rake任务,将数据加载到全部三个(self.up)中。我正在考虑在这个迁移的self.down中放入什么来从3个表中删除行?

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

回答

5

这是错误的!

迁移应仅用于迁移数据型号不是你数据使用。

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

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

rake db:seed 
+0

是的,我同意并感谢您的答案。那时我正在使用rails 2.2.2。我最近听说过db:seed,并在我的项目中使用它。使用迁移加载数据对我来说似乎不合适。 – 2009-10-03 22:38:20

3

这样做并没有真正的对错方法。根据您所做的事情,第四次迁移应该只是以其下行方法卸载数据。每个向下应该只撤消向上的动作。

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

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

通常我会保持我的迁移模式为重点,并且我会将任何数据加载到我独立调用的耙子任务中。

+0

__All的是,除了,如果你有一个rake任务加载数据,为什么与运行瑞克任务迁移打扰加载种子数据?只需运行安装的rake task部分,或者使用rake任务来加载或卸载一些演示数据.__ =>主要是为了让团队中的其他开发人员更轻松。所以他们不必记得运行一个rake任务的更多步骤。 感谢您的指导。我一直在想,他们应该一起去。现在我可以在self.down中删除第4次迁移中的行。 – 2009-08-03 13:04:03