2010-06-18 6 views
0

J'essaie de trier les résultats d'une recherche think_sphinx. Les colonnes que je veux trier sont dans les tableaux associés:Thinking_sphinx trier les associations

class Membership < ActiveRecord::Base 

    define_index do 
    indexes :title 
    indexes user.first_name, :as => :first_name 
    indexes user.last_name, :as => :last_name 

    has :organization_id, :active 
    set_property :delta => true 
end 

# begin 
sphinx_scope(:by_organization) do |org| 
    {:with => {:organization_id => org.id, :active => true}} 
end 

sphinx_scope(:sort_by_name) do 
    {:order => 'last_name, first_name'} 
end 

end 

J'appelle le code comme ceci:

search_results = Membership.by_organization(Organization.current).sort_by_name.search((search_value || ""), :page => (page || 1), :per_page => 10) 

Si je ne me le sort_by_name, puis-je obtenir le nombre exact de retour valeurs. Une fois que j'ajoute la méthode de tri, je n'obtiens aucune ligne.

J'ai également essayé de le passer dans la méthode de recherche, avec les mêmes résultats.

Répondre

1

1) pour trier les champs vous devez ajouter: sortable => true

define_index do 
    indexes :title 
    indexes user.first_name, :as => :first_name, :sortable => true 
    indexes user.last_name, :as => :last_name, :sortable => true 

    has :organization_id, :active 
    set_property :delta => true 
end 

2) vous devez ajouter direction de tri à l'option de commande

sphinx_scope(:sort_by_name) do 
    {:order => 'last_name ASC, first_name ASC'} 
end