2011-06-19 16 views
5

Używam Sunspot do generowania wielu indeksów i przeglądów moich aplikacji.Sunspot: indeks siły modelu macierzystego podczas aktualizowania modelu dziecka

W tej aplikacji mam 2 modele, które mają relację rodzic/dziecko jeden do wielu. W programie Sunspot indeksuje liczbę potomków, które ma rodzic, więc jest on dostępny do sortowania, określania zakresu itp.

Jednak po zmianie modelu podrzędnego model macierzysty nie jest automatycznie ponownie indeksowany (ponieważ się nie zmienił) . Wymuszenie parent.save przez call_back na child nie wymusza indeksu.

Więc zanim zacznę przerabiać:

Jaki byłby najlepszy sposób, aby wymusić działanie indeksu w klasie dominującej w Sunspot gdy model dziecko zostaje zmienione/dodane?

Odpowiedz

7

Miałem teraz ten sam problem. Po zapoznaniu się z API documentation for Sunspot wydaje się, że Sunspot rozszerza modele o metodę index(), która wymusza ponowną indeksację instancji.

Mając to na uwadze, należy tylko kwestia podpinania do after_save zwrotnego modelu dziecięcej, aby reindex rodzica, gdy ten jest przechowywany na bazie:

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