overide reindex searchkick method error :NoMethodError (super: no superclass method `reindex' for #<Searchkick::RecordIndexer

overide reindex searchkick method error :NoMethodError (super: no superclass method `reindex' for #<Searchkick::RecordIndexer

我们正在尝试覆盖 Searchkick 的重新索引方法,以避免在我们使用本地环境时重新索引。

所以我们创建了一个 initializers/record_indexer.rb :

class Searchkick::RecordIndexer
  def reindex(options= {})
    unless Rails.env == 'local'
      super(options)
    end
  end
end

当我尝试更新导致我的 'indexed record' 重新索引的关联模型时,它会抛出一个 NoMethodError(超级:#

我注意到 searchkick 至少有 3 个重新索引方法:

有人在 Gem Searckick (v4.4.2) 的 #reindex 方法上遇到过这种问题吗?

在您的代码中,您完全用您的实现替换了一个方法。

如果你重写了一个方法,并想调用原来的方法,你有两个选择:

  1. 用别名存储原始方法

    class Searchkick::RecordIndexer
      alias_method :orig_reindex, :reindex
    
      def reindex(options={})
        unless Rails.env == 'local'
          orig_reindex(options)
        end
      end
    end
    
  2. 添加一个模块

    module YourPatch
      def reindex(options={})
        unless Rails.env == 'local'
          super # no need to specify args if it's just pass-through
        end
      end
    end
    
    Searchkick::RecordIndexer.prepend(YourPatch)