2010-11-25 35 views

Répondre

6

C'est un vieux fil, mais comme je l'ai trouvé tout en recherchant la même information, je pensais que je partagerais ma réponse.

Ce n'est pas (pour autant que je peux dire) clairement défini sur la pensée page d'accueil Sphinx, mais la fonction de recherche sur un modèle accepte l'option : sélectionnez - et en réponse à votre deuxième question, il accepte également : se joint, donc si vous aviez deux modèles:

class Project < ActiveRecord::Base 
    attr_accessible :name 
    has_many :tasks 
end 

class Task < ActiveRecord::Base 
    attr_accessible :name 
    belongs_to :project 
end 

vous devriez être en mesure de rechercher vos tâches comme ceci:

Task.search "Fix Bug", 
      :select => 'tasks.id, tasks.name, projects.name as project_name', 
      :joins => [:project] 

Il ne fait aucun doute une façon un peu plus propre pour ce faire, je suis heureux d'être corrigé - l'idée générale fonctionne bien!

EDIT (pour penser sphynx v3)

:select est utilisé en tant que paramètre sphynx dans la version 3, et au lieu, vous devez ajouter :select et :joins à un hachage :sql. Sinon, vous obtenez des erreurs vraiment étranges qui ne sont pas si évidentes!

L'exemple ci-dessus devient alors:

Task.search "Fix Bug", 
      :sql => { :select => 'tasks.id, tasks.name, projects.name as project_name', 
         :joins => [:project] } 
+0

Aussi une autre Gotcha de se rappeler - ne pas oublier d'ajouter le 'id' pour le modèle que vous recherchez, sinon vous vous retrouverez avec un sac entier o '' rien! –