Ruby On Rails-新的迁移和模型更改导致迁移失败

时间:2018-09-26 16:03:35

标签: ruby rails-migrations

我创建了一个新迁移,以添加新表。让我们称之为 new_items会创建一个新表。

在迁移中,我已指定与另一个表的关系

t.belongs_to :parent

在我的模型中,

class NewItem < ApplicationRecord
belongs_to :parent

class Parent < ApplicationRecord
has_many :new_items, :dependent => :destroy

因此,当我从头开始所有迁移时,旧的迁移会失败 “找不到表'new_items'” 在失败的迁移中,这就是问题所在所在的行

def up
 Parent.where(name: "TestName").destroy_all
end

我的上级模型有问题,因为当我删除以下行时,它就完成了

has_many :new_items, :dependent => :destroy

我知道问题出在Parent和NewItem之间的关系上,但不确定如何最好地解决

我可以看到它为什么会发生,但不确定如何解决它,同时仍然保持表之间的关系

2 个答案:

答案 0 :(得分:1)

每当在迁移中使用ActiveRecord模型时,在这些迁移中定义它们都是明智的,因此将来对模型的任何更改都不会破坏旧的迁移。

class Parent < ApplicationRecord; end

或者以一种更好的方式,如果您的课堂不需要做任何事情

Parent = Class.new(ApplicationRecord)
在迁移类中添加的

应该可以解决您的问题。

旁注:如果只想删除parents表中的所有记录,则最好在迁移过程中调用调用Parent.delete_all。这也可以解决问题,但是将模型添加到迁移中是很好的做法。

答案 1 :(得分:0)

您不应在迁移中使用ActiveRecord模型。 Ruby类和架构不匹配时,ActiveRecord不喜欢。如果需要运行多个迁移,则会发生这种情况。

我建议仅在迁移中使用SQL查询。

def up
  execute <<-SQL
    DELETE FROM parent WHERE name = "TestName";
  SQL
end