在迁移中定义模型不适用于Rails 5

时间:2017-12-07 23:44:24

标签: ruby-on-rails database-migration data-migration rails-migrations ruby-on-rails-5.1

目前正致力于数据迁移并遇到问题。 我在我的迁移文件中有这个。

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\}/$"

我不知道这里发生了什么。非常感谢您的帮助!

1 个答案:

答案 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指出我正确的方向。