Rails 4+ 最佳实践:删除父项同时保留子项

Posted

技术标签:

【中文标题】Rails 4+ 最佳实践:删除父项同时保留子项【英文标题】:Rails 4+ Best practices: Delete parent while keeping children 【发布时间】:2015-04-18 12:51:03 【问题描述】:

我想保留子记录和层次结构,即使删除了父记录。我看到两个选项:

    保留现有父级并使用“deleted_at”字段来指示 parent 本身是不活动的,但关系仍然存在。这将导致许多有效地死掉的父记录被永久存储。嗯。 将所有被遗弃的子记录分配给通用“收集器”僵尸父记录。我更喜欢这样,但是您会丢失历史记录到子记录的原始来源。

我没有 Rails 经验,无法预见这两种方法中的哪一种是最可取的路径,或者可能有完全不同的解决方案。

SO 告诉我这似乎是一个主观问题,他们可能会关闭它。我希望不会,因为我相信其他人也有这个问题。

【问题讨论】:

你可以看看这个答案:***.com/questions/23017070/… 这也可能很有趣:***.com/questions/378331/… 谢谢大家。这些都是相关的参考资料,并且很有帮助。似乎最好的做法是使用软删除而不是硬删除。 【参考方案1】:

在我看来,您基本上是在询问“软删除”功能。当我想要这种行为时,我通常会添加一个默认为trueactive 属性。我还在模型中添加了一个active 范围,这样我就可以执行Salon.active 之类的操作来方便地获取所有活动的内容。

所以我想我的答案是我会做类似 #1 的事情,我称之为软删除。想法 #2 对我来说似乎很疯狂。

【讨论】:

谢谢!看起来软删除确实是最佳实践方式。

以上是关于Rails 4+ 最佳实践:删除父项同时保留子项的主要内容,如果未能解决你的问题,请参考以下文章

使用 JPA 注释自动从父项中删除子项和从子项中删除父项

在 MVC 中将子项添加到与父项相同的表单上

JPA / Hibernate - 删除子项删除父项(从同一个表)

Hibernate - 删除子项时如何从父项中删除实体

Rails 4 [最佳实践] 嵌套资源和浅层:true

在JPA中删除子项时保持实体关系同步