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

问题描述 投票:0回答:2

我创建了一个新的迁移来添加新表。我们称之为 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 之间的关系上,但不确定如何最好地解决

我有点明白为什么会发生这种情况,但不知道如何解决它,同时仍然保持表之间的关系

ruby rails-migrations
2个回答
2
投票

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

class Parent < ApplicationRecord; end

或者以更好的方式,如果你的班级不需要做任何事情

Parent = Class.new(ApplicationRecord)

添加到您的迁移类中应该可以解决您的问题。

旁注:如果您只想删除

parents
表中的所有记录,最好在迁移中调用
Parent.delete_all
。这也可以解决问题,但向迁移添加模型是一个很好的做法。


0
投票

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

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

def up
  execute <<-SQL
    DELETE FROM parent WHERE name = "TestName";
  SQL
end
© www.soinside.com 2019 - 2024. All rights reserved.