2011-09-17 20 views

Respuesta

1

Por qué no sólo por una (o lo que su combinación de modelo/atributo es) User.login.downcase al hacer la comparación? Esto dejará las mayúsculas en el DB tal como está, pero en el campo inferior solo para comparar.

46

Actualmente, puede realizar búsquedas sin distinción entre mayúsculas y minúsculas. ¡Pero tienes que buscar con una expresión regular! Aquí es un ejemplo de cómo lo estoy usando en http://www.VersionEye.com

User.first(conditions: {email: /^#{email}$/i}) 

Con el "/" usted está comenzando y terminando la expresión regular. La "i" después de la expresión regular significa insensible a mayúsculas y minúsculas. "^" Significa que el elemento debe comenzar con la cadena de búsqueda y "$" significa que el elemento debe terminar con la cadena de búsqueda. Esto es importante si buscas una coincidencia exacta.

+10

FYI: es posible que necesite desinfectar su expresión regular si incluye la entrada del usuario: '/^# {Regexp.escape (email)} $/i' – Andrew

+1

user = where (email: /^#{email}$/i).first – shilovk

5

Incluso puede intentar algo como:

User.where(username: /#{username}/i).first 
+0

(1) Eso no marca el caso- igualdad insensible (2) Que (AFAIK) no usará un índice para verificar la colección, por lo que puede ser muy costoso. –

+0

Sí. Esto es un 50% más lento que la consulta predeterminada. Pero verifica la igualdad insensible a mayúsculas y minúsculas. – mrudult

+1

No, no verifica la igualdad. Su expresión regular no tiene anclajes. –

2

si está utilizando rieles o MongoId puede probar el FF:

@user = User.where({:username => /.*#{name}.*/i })

Cuestiones relacionadas