在Rails中,当要删除一条记录时,我想为这些已删除的记录维护一个单独的表(结构类似于前者)。
实现此目的的一种方法是显然从第一个模型复制结构,验证和关联,并将其粘贴到已删除的项目模型中。但是,这会导致大量代码冗余,并且不是可扩展的解决方案。
有没有办法在没有太多(或任何)代码冗余的情况下在Rails中实现这一点 或者解决方案可能比上面提到的解决方案更具可扩展性 以上?
我正在使用Ruby 1.9.3-p125和Rails 3.2。
更新
我确实考虑在表格中使用额外的is_deleted
列,但是,我决定反对它,因为我不希望这个表格因删除的帖子而变得太大和混乱。我不打算真正访问这些删除的帖子 - 这些仅仅是为了保存记录或存档目的而存储。添加此列也会使访问此表的速度变得更慢,更重要的是,我担心在某些SQL条件下我可能会错过检查is_deleted == false
- 即使我在模型的default_scope
中包含此检查
答案 0 :(得分:1)
最好将它们移到单独的表中,以便主表的记录数量减少,性能不会随时间降低。
使用Rails ActiveRecord Callback进行删除,即
before_destroy :move_to_trash
.
.
def move_to_trash
Trash.create!(self)
end
这样,删除记录时,将在“废纸篓”表中创建其副本。
答案 1 :(得分:0)
嗯,基本上你想保留记录而不是扔掉它们。因此,您可能只想将它们标记为“已删除”并调整代码中的逻辑,以便在检索时不考虑这些记录。
答案 2 :(得分:0)
在原始表格中添加“已删除”列。设置模型的默认范围以排除已删除的记录。