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] }
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! –