0

假设我有以下代码:

class User < ActiveRecord::Base
  update_index('users#user') { self } 
                                      

  after_commit :send_socket_event, on: %i[create update]
  

  def send_socket_event(self):
     SockeClient.send(self)
  end
end

套接字事件被发送到客户端,然后客户端创建一个 http 请求以从对弹性搜索进行查询的端点获取新的用户信息。我的问题是响应是在 ES 上的索引更新之前完成的,因此端点响应中的信息尚未更新。

after index我想知道该课程是否有类似回调的东西Chewy::Index

4

1 回答 1

0

我没有使用过耐嚼,但在很大程度上使用了searchkick 。

因此,通过使用 searchkick,我将使用 reindex 和 remove_from_index 回调来触发我想要的任何内容。

例如 - 在下面的代码片段中,我创建了一个模块,然后将它包含在我想使用这些方法的任何模型中,我在重新索引完成后检查某些内容或从索引中删除某些内容

    ##check a model attribute or call function, here I am just checking some attribute.
    after_save :reindex , if: Proc.new { |vendor| vendor.accepted? }
    after_save :remove_from_index , if: Proc.new { |vendor| !vendor.accepted? }

    ####where remove_from_index was just a simple method in a module, so I just include this module in any model
    def remove_from_index
      self.class.name.classify.constantize.searchkick_index.remove(self)
    end
于 2020-07-20T20:29:07.697 回答