目前正致力于数据迁移并遇到问题。 我在我的迁移文件中有这个。
StandardError: An error has occurred, this and all later migrations canceled:
Subject(#70181814234340) expected, got #<DropTutorProfileTable::Subject id: 3, name: "Writing", academic_type: "academic"> which is an instance of DropTutorProfileTable::Subject(#70181808133400)
当我运行此迁移时,我收到以下错误。
TutorAccount
这是我第一次处理这个问题。我已经进行了其他迁移,我在迁移中定义模型并且没有任何问题。有趣的是,当我输出Subject
实例的类和TutorAccount
DropTutorProfileTable::Subject
实例的类时,我得到......
gsutil ls "gs://mybucket/tmp/" | grep "gs://[^/]\+/tmp/[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}/$"
我不知道这里发生了什么。非常感谢您的帮助!
答案 0 :(得分:0)
所以我找到了解决这个问题的方法。问题是如何在迁移中调用类的实例。在迁移代码中直接调用迁移中定义的模型时,它将为迁移命名。例如。
class DropTutorProfileTable < ActiveRecord::Migration[5.1]
class Subject < ActiveRecord::Base; end
def change
Subject.new.class # Returns DropTutorProfileTable::Subject
TutorProfile.subject.class # Returns Subject
end
end
这是有道理的,因为Subject
类是在迁移中定义的,并且被称为它自己的实体。但是,相关主题的类由代码库中定义的Subject
类定义,而不是迁移。如果理解普通红宝石,这种行为应该是显而易见的。我实际上运行这段代码作为例子,它验证了我的论文。感谢@inveterateliterate和@Shiko指出我正确的方向。