【发布时间】:2010-11-21 03:03:16
【问题描述】:
我有一个应用程序,我想覆盖我的许多模型的破坏行为。用例是用户可能有删除特定记录的合法需求,但实际上从数据库中删除该行会破坏影响其他相关模型的引用完整性。例如,系统的用户可能想要删除他们不再与之有业务往来的客户,但需要维护与该客户的交易。
看来我至少有两个选择:
- 将数据复制到必要的模型中,有效地反规范化我的数据模型,以便删除的记录不会影响相关数据。
- 覆盖 ActiveRecord 的“销毁”行为,以设置一个指示用户“删除”记录的标志并使用此标志隐藏记录。
我错过了更好的方法吗?
选项 1 对我来说似乎是一个可怕的想法,尽管我很想听到相反的论点。
选项 2 看起来有点像 Rails,但我想知道处理它的最佳方法。我是否应该创建自己的从 ActiveRecord::Base 继承的父类,覆盖那里的 destroy 方法,然后在我想要这种行为的模型中从该类继承?我是否还应该覆盖查找器行为,以便默认情况下不返回标记为已删除的记录?
如果我这样做了,我将如何处理动态查找器?命名范围呢?
【问题讨论】:
标签: ruby-on-rails ruby activerecord