旨在查找评论的父帖子的方法将中断,如果父评论(对评论的评论)被删除



我有一种方法可以找到子女评论的父帖。假设有这样的帖子和评论布局:

Post
    Comment
        Child comment # Find parent post all the way up tree
        Child comment
    Comment

我在用户模型中有一种方法来获取用户的评论,并将其与看起来像这样的父帖子一起放在哈希中:

# user.rb
def comment_post_hash
  @comment_hash = []
  @user_comments = Comment.where(user_id: self.id)
  @user_comments.all.each do |co|
     post = co.find_parent_post # Another method defined below
    @comment_hash.push( { comment: co, post: post} )
  end
  @comment_hash
end
 # comment.rb
 def find_parent_post
   return self.commentable if self.commentable.is_a?(Post)
   self.commentable.find_parent_post
 end

问题在于,如果链条中的某个地方删除了这样的父母,则此方法将破坏:

Post
    <deleted> # No longer exists
        Child comment # This will break the method.
        Child comment
    Comment

是否有一种重构此方法的方法,以便可以将其救出并能够找到父母的职位,无论父母评论是否已删除?我只能想到将post_id添加到评论中,但很好奇是否还有其他方法可以解决此问题。

我会给您一个快速的答案,不,没有办法更改查找已删除项目的方法,因为一旦您删除了它,就会失去该关系。p>您想到的几种解决方案是您建议使用post_id的建议,它可以满足您的需求(如果我从以前的问题中记住了,您目前只允许评论两个级别),但是,如果要更改,将来,您想允许进一步的评论,这种方法无法很好地发挥作用,因为您会跳过很多祖先的评论,直接转到上帖,可能会破坏评论结构。

如果您想将来证明这种情况,我会提出的一个建议是使用您已经拥有的多态性关系,当删除评论时,将所有孩子都指向其父母,并使用单独的专栏具有has_deleted_parent或可以表明原始注释结构的突破,并使保护视图中的结构变得更加容易。

但是,这种方法也存在一些问题,例如,如果删除的评论然后被删除了,那么布尔值就不够,需要计数器,但是事情开始变得更加复杂。

另一种方法是重新考虑UX,因此一旦删除了所有孩子的评论,就会被删除?或我想要的一种方法是不允许删除注释,而是允许浅表删除评论的评论在其中仍然存在,因此可以保护您的数据,而是作为空外壳,并且在视图中,只需沿" )的一些文字删除

不是我知道的直接答案,但我希望这也许是帮助!

相关内容

最新更新