2009-11-03 3 views
6

J'utilise la gemme 'binarylogic-searchlogic' dans la version 2.3.5 avec Rails 2.3.4.Rails: searchlogic recherche avec ou conditions

Ce que je veux faire est d'effectuer une recherche sur un modèle pour une valeur spécifiée sur plusieurs attributs. Je y arrive en enchaînant tout ensemble comme

User.first_name_or_last_name_or_email_like(value) 

Mais avec de plus en plus d'attributs dans cette recherche cela tend à être laid. Au lieu de cela, je voudrais utiliser le mécanisme de recherche de searchlogic comme ceci:

search = User.search 
search.first_name_like = value 
search.last_name_like = value 
.. 
@users = search.all 

C'est donc le chemin de recherche par ET - mais ce que je veux est OR. J'ai trouvé deux façons d'y parvenir, mais les deux ne fonctionnent pas.

1er un: un PREPEND or_ à la condition

search = User.search 
search.first_name_like = value 
search.or_last_name_like = value 
@users = search.all 

Cela me donne The or_last_name_like is not a valid condition. You may only use conditions that map to a named scope

2ème: utiliser search.any

search = User.search 
search.first_name_like = value 
search.last_name_like = value 
@users = search.any 

me donne undefined method tout » pour #`.

Une idée est là-dessus? Suis-je le bon point du readme?

Merci pour votre aide très bienvenue!

modifier: temps pour une solution de contournement laid:

search = User.search 
search.first_name_like = value 
search.last_name_like = value 
User.find(:all, :conditions => search.scope(:find).gsub('AND','OR')) 

Works mais sûrement pas la voie à suivre, est-ce pas?

Répondre

2

Je ne pense pas qu'il existe une autre façon de le faire. Par défaut, il rejoindra les arguments avec AND.

Le code OU semble fonctionner uniquement avec le chaînage.

+0

+1 Après un coup d'œil, je suis d'accord avec cette réponse. Pour confirmation, vous pouvez demander à la liste de diffusion de Searchlogic. –

Questions connexes