【问题标题】:Rails migration questionRails 迁移问题
【发布时间】:2009-08-03 12:38:26
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: ruby-on-rails ruby migration rake


    【解决方案1】:

    这是错误的!

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

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

    然后您可以使用简单的 rake 任务加载种子数据

    rake db:seed
    

    【讨论】:

    • 是的,我同意并感谢您的回答。那时我正在使用 rails 2.2.2。我最近听说了 db:seed 并在我的项目中使用它。在我看来,使用迁移加载数据从来都不是正确的。
    【解决方案2】:

    没有真正的正确或错误的方法来做到这一点。根据您所做的,第 4 次迁移应该只是在其 down 方法中卸载数据。每次 down 应该只撤消 up 的操作。

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

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

    通常我会专注于迁移架构,并将任何数据加载放在我独立调用的 rake 任务中。

    【讨论】:

    • 除此之外,如果您有一个 rake 任务来加载数据,为什么还要为运行该 rake 任务的迁移而烦恼呢?只需将运行 rake 任务作为安装的一部分,或者仅使用 rake 任务来加载或卸载一些演示数据。 => 主要是为了让团队中的其他开发人员更轻松。因此,他们不必再记住运行 rake 任务的步骤。不过感谢您的指导。我一直在想,他们应该一起去。现在我可以删除 self.down 中第 4 次迁移中的行。
    猜你喜欢
    • 2010-11-01
    • 1970-01-01
    • 2015-08-30
    • 2015-08-03
    • 2016-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多