2014-01-16 34 views
0

您好我正在rails項目中使用退休和elasticsearch索引我的用戶和一個額外的模型special_codes。我的目標是在我的用戶模型中添加一個索引,以便在搜索用戶時新索引(special_code)將提供匹配。如何索引輪胎模型關聯(退役)

class User < ActiveRecord::Base 
    include Tire::Model::Search 
    include Tire::Model::Callbacks 
    has_one :specialcode 

    after_create :generate_specialcode 

    mapping do 
    indexes :email, :type => 'string' 
    indexes :specialcode do 
     indexes :code, :type => 'string' 
    end 
    end 

    def to_indexed_json 
    to_json(include: { specialcode: {only: [:code]} }) 
    end 

    private 

    def generate_specialcode 
    Specialcode.create(code: 'derp', user_id: self.id) 
    self.tire.update_index #not really needed(see after_save), just here for example. 
    end 
end 

class Specialcode < ActiveRecord::Base 
    include Tire::Model::Search 
    include Tire::Model::Callbacks 

    belongs_to :user 

    after_save :update_user_index 

    private 

    def update_user_index 
    self.user.tire.update_index 
    end 
end 

我想看到User.search('derp')帶回用戶打擊,因爲我在與用戶索引的特殊代碼。我已經嘗試了很多映射和更新索引而沒有獲得任何命中。上面的例子有希望提供一個工作的基礎。謝謝

更新

我在布魯斯的幫助下找到了解決方案。我已將mappingto_indexed_jsonupdate_user_index添加到上面的代碼中。

回答

1

我想你已經在用戶模型中有了to_indexed_json和映射嗎?嘗試使用after_touch回調來更新用戶的索引。

+0

布魯斯感謝您的回覆。它讓腦汁再次流動起來。我的to_indexed_json不正確。我在這個[線程](https://github.com/karmi/retire/issues/898)中偶然發現了我的錯誤。我會更新我的代碼以反映修復。 – MikeV