Rails - 活动和非活动数据的软删除或存档

Posted

技术标签:

【中文标题】Rails - 活动和非活动数据的软删除或存档【英文标题】:Rails - Soft Delete or Archive for active and non active data 【发布时间】:2012-04-10 03:36:10 【问题描述】:

我已经阅读了很多关于软删除和存档的内容,并且看到了所有的优点和缺点。我仍然对哪种方法最适合我的情况感到困惑。我将使用posts和cmets的概念,看看我是否可以更容易解释一下

Post -> Comments
Post.all

Outside RSS Feeds -> Post -> Comments
RSSFeed.posts (Return the ones that are deleted or not)

帖子被“删除”,但我需要仍然可以从 RSS 提要访问帖子,而不是应用程序的管理员。

我听到很多关于软删除的问题,但我认为这可能对我的应用程序最有意义,并且觉得如果我使用存档,那么我将不得不运行多个查询

RSSFeed.posts || RSSFeed.archived_posts  

不确定在@$$ 中哪个更有效或更痛苦。想法或例子?我知道这个例子听上去很愚蠢,但我试着想出多种情况来找出走哪条路。

【问题讨论】:

【参考方案1】:

只需在您的数据库中添加另一列并将其命名为archivated

链接使用link_to_if

<%= link_to_unless @post.archivated?, @post.name, post_path(@path) %>

更多的导轨优点:

app/models/post.rb

class Post < ActiveRecord::Base
  default_scope where( active: true )

  def archivate
    unless self.archivated?
      self.archivated = true
      self.save
    end
  end

  def dectivate
    if self.archivated?
      self.archivated = false
      self.save
    end
  end
end

app/models/archive.rb

class Archive < Post
  set_table_name :posts # make this model use the posts table

  default_scope where( active: false )
end

现在你可以做这样的事情了:

@post = Post.find(some_id)
@post.archivate
Archive.find(some_id) # should return the post you just archivated

【讨论】:

Klump,你提供了一些很棒的信息,我已经考虑过这样做。我认为软删除还不错,但有些人认为确实如此,并且您应该走存档路线。我想如果我走存档路线,我会寻找更多,与我认为更容易的软删除相比,从两个不同的表中查找活动和非活动有多难。 我不知道使用存档是否有很大优势,因为您总是有两个模型,并且当您将其移入存档时,要使其与所有链接无缝工作会有些麻烦。将它保存在一个数据库中要容易得多 - 您可以构建一个名为 Archive 的伪模型(没有真实数据库表的模型)并访问所有软删除的帖子。您可能想要添加另一个标志进行归档。这样做的好处是您只有一个数据库表 - 所有 ID 都保持有效 - 即使它被存档或软删除...... 我更新了我的答案。看看它应该会让你更接近你想要的。 谢谢!我认为这看起来是一个尝试的好主意,而不是一些我并不真正需要的笨重的解决方案:)【参考方案2】:

你一定会明白的,看看:

http://railspikes.com/2010/2/26/acts-as-archive

【讨论】:

维克,谢谢你的信息。我已经检查了那个宝石,它看起来很棒。我还不能 100% 确定它是否对我来说太过分了,因为我的场景更简单(我认为),但最终还是一个很好的解决方案!!! 遗憾的是,不再维护作为存档的 gem

以上是关于Rails - 活动和非活动数据的软删除或存档的主要内容,如果未能解决你的问题,请参考以下文章

在 Rails 5.2 中禁用活动存储

如何更改 viewpager 中每个片段的点指示器(活动和非活动)的颜色?

如何为用户终止所有活动和非活动的 oracle 会话

rails活动模型从同一个表查询父子

什么可能导致预定的 Rails 活动作业消失?

如何获取所有帐户(活动和非活动)的统计信息?