【问题标题】:Rails - Soft Delete or Archive for active and non active dataRails - 活动和非活动数据的软删除或存档
【发布时间】: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  

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

【问题讨论】:

    标签: ruby-on-rails archive soft-delete


    【解决方案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
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-23
    • 2011-05-07
    • 2014-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多