2009-11-03 10 views
6

Estoy usando la gema 'binarylogic-searchlogic' en la versión 2.3.5 junto con Rails 2.3.4.Rails: searchlogic search with o conditions

Lo que quiero hacer es realizar una búsqueda en un modelo para un valor específico sobre múltiples atributos. Puedo lograr esto a través de encadenar todo juntos como

User.first_name_or_last_name_or_email_like(value) 

Pero con más y más atributos en esta búsqueda, esto tiende a ser feo. En su lugar me gustaría utilizar el mecanismo de búsqueda de searchlogic así:

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

Así que esta es la manera de buscar a través de Y - pero lo que yo quiero es O. He encontrado dos formas de lograr esto, pero ninguno de los dos funciona.

primero uno: anteponer un or_ a la condición

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

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

segundo uno: el uso search.any

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

me da ninguna undefined method' para `#.

¿Alguna idea sobre eso? ¿Estoy confundiendo el punto correcto del archivo Léame?

Gracias por su bienvenida ayuda!

edición: tiempo para un poco fea solución:

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

funciona, pero seguramente no es el camino a seguir, ¿verdad?

Respuesta

2

No creo que haya otra forma de hacerlo. Por defecto, unirá los argumentos con AND.

El código O, solo parece funcionar con el encadenamiento.

+0

+1 Después de un rápido vistazo, estoy de acuerdo con esta respuesta. Para la confirmación, puede consultar la lista de correo de Searchlogic. –