Ruby on rails 如果有多个关系,是否有一个关系自动设置为零

Ruby on rails 如果有多个关系,是否有一个关系自动设置为零,ruby-on-rails,activerecord,has-one,Ruby On Rails,Activerecord,Has One,给出两个模型,其中一个有一个关联: class ShopInfo belongs_to :shop end class Shop has_one :shop_info end s = Shop.create ss1 = s.create_shop_info 在我的代码的其他地方,我是这样做的 ss2 = s.create_shop_info 在此之后,ss1.shop_id设置为nil,因此ss1现在是孤立记录 有没有办法删除以前的记录,而不是将它们设置为零?弗兰,如果你看一

给出两个模型,其中一个
有一个关联:

class ShopInfo
  belongs_to :shop
end

class Shop
  has_one :shop_info
end


s = Shop.create
ss1 = s.create_shop_info
在我的代码的其他地方,我是这样做的

ss2 = s.create_shop_info 
在此之后,ss1.shop_id设置为nil,因此ss1现在是孤立记录

有没有办法删除以前的记录,而不是将它们设置为零?弗兰,如果你看一下,我想你应该使用
关联=
方法:

关联=(关联)

指定关联对象,提取 主键,将其设置为外键,并保存关联项 对象要避免数据库不一致,请永久删除 指定新对象时现有关联对象,即使新对象 一个未保存到数据库

这意味着您的代码可能看起来像

ss2.shop_info = ShopInfo.new(...)

默认情况下,has_one关联会执行一个
清空
。添加
dependent::destroy
解决了这个问题

class Shop
  has_one :shop_info, dependent: :destroy
end
如果有人想了解更多信息,则ActiveRecord的代码有一条替换记录,如下所示:

但是,如果在关联中添加了
dependent
选项,则也会执行
delete
方法:


为什么不更新以前的shop_info记录,而不是创建一个新的记录?我正试图阻止其他开发人员创建孤立记录来执行此调用。我可以将此作为一个孤立的解决方案,但我不会在将来的代码中阻止其他开发人员的这种行为。谢谢您的建议。我在阅读文档时发现了解决方案。不幸的是,您的解决方案并没有阻止其他开发人员在尝试执行create\u shop\u info调用时遇到同样的问题。这应该被接受为答案!我不知道依赖选项是这样工作的。因为这是我自己的答案,我必须等两天才能接受:(@FranMartinez这是否意味着
中的
依赖项的默认值是
无效