当前位置:  开发笔记 > 编程语言 > 正文

Rails模型验证器打破了早期的迁移

如何解决《Rails模型验证器打破了早期的迁移》经验,为你挑选了2个好方法。

我在rails应用程序中有一系列迁移,其中包括以下步骤:

    创建"用户"模型的基本版本

    创建此模型的实例 - 系统中至少需要一个初始用户,以便您可以登录并开始使用它

    更新"用户"模型以添加新字段/列.

现在我在这个新字段/列上使用"validates_inclusion_of".这在我的初始开发机器上运行良好,该机器已经有一个应用了这些迁移的数据库.但是,如果我转到新计算机并运行所有迁移,则第2步失败,因为validates_inclusion_of失败,因为迁移3中的字段尚未添加到模型类中.

作为一种解决方法,我可以注释掉"验证_..."行,运行迁移并取消注释,但这并不好.

更好的方法是重新排序我的迁移,以便在添加所有列之后,用户创建(步骤2)最后.

我是铁杆新手,所以我想我会问这种情况的首选方法是:)



1> Ben Scofield..:

避免此问题的最简单方法是在第二台机器上使用rake db:schema:load,而不是db:migrate.D:S:L使用schema.rb加载模式的最新版本,而不是从头开始迁移.

如果在部署到生产计算机(保留数据很重要)时遇到此问题,则可能必须将迁移合并到单个文件中而不会发生冲突.



2> 小智..:

您可以在迁移中声明一个具有相同名称的类,它将覆盖您的app/models一个:

class YourMigration < ActiveRecord::Migration

  class User < ActiveRecord::Base; end

  def self.up
    # User.create(:name => 'admin')
  end

end

不幸的是,您的IDE可能会尝试基于此类(Netbeans)自动完成,并且您无法在其中使用模型逻辑(除非您复制它).

推荐阅读
手机用户2402851335
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有