【问题标题】:What's an efficient way to delete threaded comments from database in active record?从活动记录中的数据库中删除线程评论的有效方法是什么?
【发布时间】:2019-11-19 19:32:23
【问题描述】:

在我们的应用中,我们有用户帖子和用户帖子上的 cmets。用户也可以评论 cmets,所以它有点像 Reddit Post 模型。由于产品要求,当用户删除他们的帖子时,所有的 cmets,包括评论回复也必须被删除。我们遇到了评论线程数可能达到数千的情况。我想知道在 Rails/Active Record 中处理这个问题的最佳方法是什么?我正在考虑像深度优先搜索和批量删除 cmets 一样。我看到了一些可用于将 db 记录映射到树状结构的 gem,但它们都需要添加一个我想避免的 db 列。有没有人有什么建议?我们正在使用 Postgres 10 和 rails 5

【问题讨论】:

    标签: ruby-on-rails postgresql activerecord tree


    【解决方案1】:

    也许尝试在 ActiveJob 中执行此操作并在后台执行 cmets 删除。

    【讨论】:

      【解决方案2】:

      ActiveRecord 有after_destroy 回调,与后台工作人员一起使用会很有用。

      另外,不建议使用:dependent => :destroy,在你的情况下它是错误的。

        after_destroy :delete_comments
      
        private
        def delete_comments
            BlablaDeleteCommentsJob.perform_later(self.id)
        end
      
      # worker | job
      class BlablaDeleteCommentsJob < ApplicationJob
      
          def perform(blog_id)
              puts "*"*50
              puts "Performing from |BlablaDeleteComments Job| "
              puts "*"*50
      
              # batch delete comments here
              Comment.where(blog_id: blog_id).delete_all
          end
      end
      
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-03
        • 2012-05-01
        • 2011-08-19
        • 2011-07-01
        • 2010-09-07
        • 2020-05-14
        • 2018-01-24
        相关资源
        最近更新 更多