2010-04-08 9 views
0

J'ai 2 modèles utilisateur et discussion. J'ai défini les indices pour les modèles ci-dessous:
Pour le modèle de l'utilisateur:Penser Sphinx avec Rails - Delta indexation semble fonctionner correctement pour un modèle, mais pas pour l'autre

define_index do 
indexes email 
indexes first_name 
indexes last_name, :sortable => true 
indexes groups(:name), :as => :group_names 
has "IF(email_confirmed = true and status = 'approved', true, false)", :as => :approved_user, :type => :boolean 
has "IF(email_confirmed = true and (status = 'approved' or status='blocked'), true, false)", :as => :approved_or_blocked_user, :type => :boolean 
has points, :type => :integer 
has created_at, :type => :datetime 
has user(:id) 
set_property :delta => true 
end 

Pour le modèle de discussion:

define_index do 
indexes title 
indexes description 
indexes category(:title), :as => :category_title 
indexes tags(:title), :as => :tag_title 
has "IF(publish_to_blog = true AND sticky = false, true, false)", :as => :publish_to_main, :type => :boolean 
has created_at 
has updated_at, :type => :datetime 
has recent_activity_at, :type => :datetime 
has views_count, :type => :integer 
has featured 
has publish_to_blog 
has sticky 
set_property :delta => true 
end 

J'ai ajouté une colonne delta aux deux tables selon la documentation . Mon problème est que l'indexation delta ne fonctionne que pour le modèle Discussion et non pour le modèle User. Par exemple: Quand je mets à jour le 'titre' d'une discussion, je peux voir que le sphinx de la pensée fait tourner les indices etc. (comme le montrent les logs). Mais quand je mets à jour le 'first_name' ou le 'last_name' d'un utilisateur, rien ne se passe.

Le modèle User possède également une association has_many: through via un modèle appelé GroupsUser. J'ai installé un after_save sur le GroupsUser comme suit:

def set_user_delta_flag 
user.delta = true 
user.save 
end 

Même cela ne semble pas déclencher l'indexation delta sur le modèle de l'utilisateur. Une configuration similaire pour le modèle Discussion fonctionne parfaitement! Quelqu'un peut-il me dire pourquoi cela se produit?

Répondre

0

D'accord, je l'ai compris. Le problème était avec la définition de l'attribut:

has user(:id) 

Lorsque je l'ai retiré de la définition et a couru une reconstruction, tout semblait fonctionner parfaitement.