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这是否意味着中的依赖项的默认值是无效?