0

在 Rails 中,当要删除一条记录时,我想为这些删除的记录维护一个单独的表(在结构上类似于前者)。

实现这一点的一种方法是明显地从第一个模型中复制结构、验证和关联,并将其粘贴到已删除项目模型中。但是,这会导致大量代码冗余,并且不是可扩展的解决方案。

有没有一种方法可以在 Rails 中实现这一点而没有太多(或任何)代码冗余或可能比上述解决方案更具可扩展性的解决方案?

我正在使用 Ruby 1.9.3-p125 和 Rails 3.2。

更新

我确实考虑过在表格中使用一个额外is_deleted的列,但是,我决定反对它,因为我不希望这个表格变得太大而且被删除的帖子弄得乱七八糟。我并不打算真正访问这些已删除的帖子——这些只是为了记录保存或存档目的而存储的。添加此列也会使访问此表变得更慢,更重要的是,我担心我可能会错过is_deleted == false某个 SQL 条件中的检查 - 即使我default_scope在模型中包含此检查。

4

3 回答 3

1

将它们移动到单独的表中是个好主意,这样您的主表的记录数就会减少,并且性能不会随着时间的推移而降低。

使用 Rails ActiveRecord 回调进行删除,即

before_destroy :move_to_trash
.
.
def move_to_trash
  Trash.create!(self)
end

这样,当一条记录被删除时,它的副本就会在 Trash 表中创建。

于 2014-02-24T12:36:29.583 回答
0

好吧,基本上你想保留记录而不是扔掉它们。因此,您可能只想将它们标记为“已删除”并调整代码中的逻辑,以便在检索它们时不考虑这些记录。

于 2012-03-02T07:41:33.033 回答
0

在原始表格中添加一个“已删除”列。设置模型的默认范围以排除已删除的记录。

于 2012-03-02T07:45:18.193 回答