Uso de índices Delta para asociaciones en Thinking Sphinx

Tengo un modelo de producto:

class Product < ActiveRecord::Base
    belongs_to :subcategory

    define_index do

        # fields
        indexes subcategory.name, :as => :subcategory, :sortable => true, :facet => true

        # attributes
        has subcategory_id, created_at, updated_at

        #properties
        set_property :delta => true

Ahora, suponga que un usuario actualiza un nombre de subcategoría, ¿cuál es la forma correcta de actualizar el índice delta de productos?

De acuerdo con esta documentación:http://freelancing-god.github.com/ts/en/deltas.html, unasalvar el mensaje debe enviarse al producto, por lo que en este caso debería elegir cada producto relacionado con la subcategoría y enviar elsalvar mensaje, algo como esto:

class Subcategory < ActiveRecord::Base
    has_many :products

    after_save :set_product_delta_flag

    private

    def set_product_delta_flag
        products.each { |product|
        product.delta = true
        product.save
     }
    end
  end

Creo que esto es exagerado porque tenemos unos 100.000 productos por subcategoría. ¿Es esta la forma correcta de actualizar el índice delta? ¿Me estoy perdiendo de algo?

Después de agregar esto:

def set_product_delta_flag
    Product.update_all ['delta = ?', true], ['subcategory_id = ?', id]
    Product.index_delta
end

Siempre recibo este error:

NoMethodError (método indefinido `index_delta 'para #):

Entonces, la solución a este problema fue enviar el mensaje * define_indexes * al modelo del Producto.

Después de solucionar este problema, todo estaba bien, pero el delta_index no se actualizó correctamente, tenía que hacerlosalvar dos veces al modelo de subcategoría.

Entonces mi solución final es esta:

after_commit :set_product_delta_flag

private

def set_product_delta_flag
    Product.define_indexes
    Product.update_all ['delta = ?', true], ['subcategory_id = ?', id]
    Product.index_delta
end

Utilizandoafter_commit ydefine_indexes Cuál es la solución correcta? Es el único que he encontrado.

Respuestas a la pregunta(1)

Su respuesta a la pregunta