1

いくつかのモデルを使用した単純なアルゴリアのセットアップがあり、各モデルにはいくつかの属性があります。例:

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: Algolia_tagsのレコードには['user_1', 'user_2']、Rails の関連付けによって決定される値があります。Algolia のレコードと Rails の DB から削除されたレコードの間の関連付けは、Algoliaのレコードのタグの配列からuser_2削除するにはどうすればよいですか?user_2

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 に答える