2015-11-05 48 views
1

我有一個簡單algolia設置的幾個模型和每個模型都有一些屬性,例如:Algolia基於Rails關聯的標記搜索,如何在關聯創建/銷燬時更新標記?

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模型不知道,因此會對搜索結果產生負面影響。

我如何添加一個ActiveRecord回調至Connection模型,從而使_tags更新爲包含或排除(基於創造或毀滅)相應更新的記錄_tags關鍵?

tldr:_tags在Algolia的一個記錄上有價值['user_1', 'user_2']由Rails中的關聯決定。 Algolia和user_2中的記錄之間的關聯從Rails中的DB中刪除,我如何從Algolia的記錄中的標籤陣列中刪除user_2

+0

是在瀏覽器或從你的服務器執行的algolia搜索? – MMachinegun

+0

在瀏覽器中,但與問題無關。 – Noah

回答

2

GitHub上有一個pending issue關於這個:檢測底層關聯的變化。

在此期間,你可能會迫使User對象的索引在Connection對象的after_save的回調函數:

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


class Connection 
    after_save :reindex_user 
    belongs_to :user 

    private 
    def reindex_user 
    self.user.reindex! 
    end 
end 
+0

你能舉一個例子嗎?不明白「強制索引」。謝謝您的幫助。 – Noah

+0

剛剛編輯它固定類名稱+添加的代碼示例。 – redox