我创建了一个新迁移,以添加新表。让我们称之为 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之间的关系上,但不确定如何最好地解决
我可以看到它为什么会发生,但不确定如何解决它,同时仍然保持表之间的关系
答案 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