2009-11-03 1 views
6

Ich benutze das 'binaloglogic-searchlogic' Juwel in Version 2.3.5 zusammen mit Rails 2.3.4.Rails: searchlogic Suche mit oder Bedingungen

Was ich tun möchte, ist die Suche nach einem Modell für einen bestimmten Wert über mehrere Attribute. Dies erreiche ich mag alles zusammen

User.first_name_or_last_name_or_email_like(value) 

durch Verkettungs Aber mit immer mehr Attribute in dieser Suche ist dies jedoch häufig hässlich sein. Stattdessen würde Ich mag den Suchmechanismus von searchlogic wie folgt verwenden:

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

Das ist also der Weg über die Suche und - aber was ich will ist oder. Ich habe zwei Möglichkeiten gefunden, dies zu erreichen, aber beide funktionieren nicht.

1. one: prepend eine or_ der Bedingung

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

Das bin ich The or_last_name_like is not a valid condition. You may only use conditions that map to a named scope

2. gibt man: verwenden search.any

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

gibt mir undefined method ‚jeder für #`.

Irgendeine Idee ist das? Vernachlässige ich den richtigen Punkt der Readme?

Vielen Dank für Ihre Hilfe!

edit: Zeit für einige hässliche Abhilfe:

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

Works ist aber sicherlich nicht der richtige Weg zu gehen, ist es nicht?

Antwort

2

Ich glaube nicht, dass es einen anderen Weg gibt, es zu tun. Standardmäßig verbindet es die Argumente mit AND.

Der OR Code, scheint nur mit Verkettung zu arbeiten.

+0

+1 Nach einem kurzen Blick, stimme ich dieser Antwort zu. Zur Bestätigung können Sie die Searchlogic Mailingliste fragen. –