您可以通过使用外键添加一些参照完整性来防止myobject.delete
在数据库中。我建议查看将外键添加到 Rails 模型
在我的项目中,这并没有阻止myobject.destroy
. 我认为这是因为它使用了令人敬畏的嵌套 set gem非常努力地为您处理级联破坏。
为了防止myobject.destroy
我发现如何在 rails supper 中“验证”销毁有帮助
我最终在迁移中使用了before_destroy
以及添加了一些参照完整性。如果使用或使用,add_foreign_key
这将防止删除。myobject.delete
myobject.destroy
在我的情况下myobject
,它本身有很多,并且属于它自己。这就是act_as_nested_set
处理。
模型
class Myobject
before_destroy :allow_destroy
# ^ this has to be above act_as_nested_set
acts_as_nested_set
def allow_destroy
return true if self.descendants.blank?
# the error is optional.
self.errors.add('Cannot_delete', 'myobject still has children')
throw(:abort)
end
end
移民
class AddForignKeyToMyobject < ActiveRecord::Migration
def change
add_foreign_key :myobject, :myobject, column: :parent_id
end
end