如何索引轮胎中的模型关联(退休)

时间:2014-01-16 22:16:10

标签: ruby-on-rails elasticsearch tire

您好我在rails项目中使用retire和elasticsearch来索引我的用户和另一个模型special_codes。我的目标是为我的Users模型添加一个索引,这样当我搜索用户时,新索引(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 个答案:

答案 0 :(得分:1)

我想你已经在User模型中使用了to_indexed_json和映射?尝试使用after_touch回调来更新用户中的索引。