提供两个模型,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现在是一个孤儿记录。
有没有办法删除以前的记录而不是将它们设置为nil?
答案 0 :(得分:4)
默认情况下,has_one关联执行nullify
。添加dependent: :destroy
解决了问题。
class Shop
has_one :shop_info, dependent: :destroy
end
如果有人想要更多信息,has_one替换记录的ActiveRecord代码就是:
但是如果在关联中添加dependent
选项,也会执行delete
方法:
答案 1 :(得分:1)
Fran,如果你看一下the has_one
documentation,我想你想使用association=
方法:
<强>关联=(准)强>
指定关联对象,提取 主键,将其设置为外键,并保存关联 宾语。为避免数据库不一致,请永久删除 分配新的现有关联对象,即使是新的 一个未保存到数据库。
这意味着您的代码可能看起来像......
ss2.shop_info = ShopInfo.new(...)