2010-06-21 4 views
0

J'ai la question suivante:à l'aide searchlogic avec les associations HABTM

J'ai deux classes dans mon application rails, reliés par une association HABTM, comme ceci:

#ad.rb 
has_and_belongs_to_many :specs 
#spec.rb 
has_and_belongs_to_many :ads 

Rejoints par une table ads_specs. J'essaie d'effectuer une recherche sur la classe Ad en utilisant l'excellent gemme searchlogic. Tout s'est bien passé jusqu'à ce que je veuille retourner toutes les annonces qui ont toutes les spécifications sélectionnées, pas l'une d'entre elles.

J'ai essayé @ads = Ad.specs_id_like_all(id1, id2, id3) mais sans résultat, car je pense qu'il essaie de faire correspondre une spécification avec un id de "id1, id2, id3". J'ai également essayé de .split les ids ou de les taper directement dans un tableau mais rien n'a fonctionné.

Ma requête de recherche exacte est:

if params[:search] 
    @ads = Ad.search(:price_lte => params[:search][:price], 
        :rulaj_lte => params[:search][:rulaj], 
        :fabrication_date_gte => Date.new(params[:search][:"an_fabr(1i)"].to_i,"01".to_i,"01".to_i)).specs_id_like_all(2, 457, 233) 

else 
    @ads = Ad.all 
end 

gars Avez-vous une idée comment pourrais-je résoudre ce problème? Je jure que c'est la dernière fois que j'utilise les associations HABTM dans une application rails, mais il est trop tard pour passer à une version polymorphe si tard dans le processus de développement :).

Répondre

0

Si je comprends bien, vous essayez d'exécuter une requête SQL IN() (c.-à-spec_id IN (x,y,z..))

Searchlogic pris en charge par le passage d'un tableau à une méthode *_eq() qui utilisera prédicat de SQL IN():

Ad.search(:spec_id_eq => [1,2,3,4]) 

** Vous ne savez pas si cela fonctionne dans les anciennes versions de Searchlogic *

Questions connexes