我们以此案为例:
class Child < ActiveRecord::Base
belongs_to :fruitful, polymorphic: true
end
class Parent < ActiveRecord::Base
has_many :children, as: :fruitful, dependent: :destroy
end
# Once I create the parent and children
p = Parent.create
p.children << Child.new
p.children << Child.new
p.save
# But deleting parent does not delete children:
p.destroy # why not?
问题变成,“依赖:: destroy”不支持活动记录的多态关联,我是否需要实现before_destroy回调以防止孤立记录?
答案 0 :(得分:1)
那应该是belongs_to :parent
吗?
您可能只需在致电parent.reload
之前致电parent.destroy
,以便了解其中的儿童身份。执行<< Child.new
时,内存中的对象可能无法准确反映数据。
修改:This guy explains it better!
在实践中,我希望你在操作它的孩子后通常不会直接销毁一个物体,所以这可能是一个控制台问题,你不应该在你的应用程序中reload
答案 1 :(得分:0)
如果你需要删除孩子,父母也要自动删除
使用以下
class Child < ActiveRecord::Base
belongs_to :fruitful, polymorphic: true , dependent: :destroy
答案 2 :(得分:0)
使用destroy而不是delete
:destroy,当对象被销毁时,销毁对象将被调用 相关对象。 :delete,当对象被销毁时,其所有 关联的对象将直接从数据库中删除,而无需 调用他们的destroy方法。