1

我有一个简单的 algolia 设置,有几个模型,每个模型都有一些属性,例如:

class User < ActiveRecord::Base
  include AlgoliaSearch

  algoliasearch do
    attributes :id, :name

    add_attribute :_tags    
  end

  def _tags
    users = []

    self.connections.each do |connection|
      users.push('user_' + connection.user_id.to_s)      
    end

    users
  end
end

上面的设置很容易让我限制每个用户的搜索结果,以便用户只能看到他们有权查看它们是否在 Rails 应用程序中关联/相关的记录。

但是,当Connection模型被创建或销毁时,User模型是不知道的,因此会对搜索结果产生负面影响。

如何向Connection模型添加 ActiveRecord 回调并相应地更新_tags记录上的键,以便_tags更新为包含或排除(基于创建或销毁)?

tldr:_tags在 Algolia 中的记录具有['user_1', 'user_2']由 Rails 中的关联确定的值。Algolia 中的记录与user_2Rails 中的 DB 之间的关联已从数据库中删除,如何user_2从 Algolia 中记录的标签数组中删除?

4

1 回答 1

3

GitHub 上有一个悬而未决的问题:检测底层关联的变化。

User同时,您可以在对象的 after_save 回调中强制对对象进行索引Connection

class User
  algoliasearch do 
  # [...]
  end
end


class Connection
  after_save :reindex_user
  belongs_to :user

  private
  def reindex_user
   self.user.reindex!
  end
end
于 2015-11-05T22:46:02.743 回答