如何编辑gem的方法?

时间:2015-08-25 04:00:06

标签: ruby-on-rails ruby

我正在使用gem acts_as_commentable_with_threading,我想在destroy方法中添加一些东西。目前,如果您删除评论并且有回复,则会删除评论并进行回复。我想保留此功能仅用于根评论,但不适用于孩子。所以,如果它是这样的

     Comment 1
     /        \ 
     \      Comment 4
    Comment 2
       \
        \
      Comment 3

评论2,3和4都是1的孩子,但3也是2的孩子。我想这样做,如果你删除评论2,评论3仍然会在那里。但是,请保留它,以便删除注释1,然后删除其下的所有注释,因为注释1是根注释。所以我必须在gem中编辑destroy方法以允许这个。我该怎么做呢? (不是真的问如何做逻辑,而是在哪里可以编辑方法,但我也很感激逻辑方面的帮助)

1 个答案:

答案 0 :(得分:1)

您可以通过monkey patching执行此操作,这主要涉及在另一个文件中定义类或模块的其他方面。我发现,放置它的好地方是 config / initializers

因此,如果你想覆盖A :: B类的destroy方法,你可以创建一个类似的文件:

require 'loads_a_b'
module A
  class B
    def destroy_with_child_preservation
      # your code
    end
    alias_method_chain :destroy, :child_preservation
  end
end

您可以通过调用destroy_without_child_preservation

来引用原始方法