Sunspot: принудительный индекс родительской модели при обновлении дочерней модели - PullRequest
5 голосов
/ 19 июня 2011

Я использую Sunspot для создания множества индексов и обзоров моих приложений.

В этом приложении у меня есть 2 модели, которые имеют отношение один-ко-многим родитель / ребенок. С помощью Sunspot я индексирую количество детей, которых имеет родитель, так что это доступно для сортировки, определения области и т. Д.

Однако, когда я изменяю дочернюю модель, родительская модель автоматически не переиндексируется (так как она не изменилась). Принудительное использование parent.save с помощью call_back для дочернего элемента также не приводит к принудительной индексации.

Итак, прежде чем я начну взламывать:

Каков наилучший способ принудительного действия индекса для родительского класса в Sunspot при изменении / добавлении дочерней модели?

1 Ответ

7 голосов
/ 30 августа 2011

У меня сейчас была такая же проблема.После изучения документации API для Sunspot кажется, что Sunspot расширяет модели с помощью метода index(), который вызывает переиндексирование экземпляра.

Учитывая это, это должно быть простовопрос подключения к обратному вызову after_save дочерней модели, чтобы переиндексировать родительский объект, когда он сохраняется в базе данных:

class Parent < ActiveRecord::Base
  has_many :children
end

class Child < ActiveRecord::Base
  belongs_to :parent
  after_save :reindex_parent!

  def reindex_parent!
    parent.index
  end
end
...