2010-07-01 8 views
6

Tengo una consulta que estoy usando para una búsqueda con: condiciones como esta:Rails La consulta SQL con% Wildcards funciona en SQLite pero no en PostgreSQL?

:conditions => ['family_name LIKE ? OR given_name LIKE ?', "%#{params[:search]}%", "%#{params[:search]}%"] 

La consulta funciona bien localmente en SQLite, pero cuando empujo a Heroku en PostgreSQL, sólo los primeros trabajos% para ambos family_name y given_name. En otras palabras, coincidirá con una palabra clave que aparece al final de una palabra, pero no al principio ni al medio.

Ejemplo: Hay un registro existente con: FAMILY_NAME => "Washington" y: given_name => "George"

Una búsqueda de "hington" o "RGE" va a recuperar este registro. Una búsqueda de "Lavado" o "Geo" no lo hará.

Soy un nuevo usuario y soy bastante nuevo en los rieles. Gracias de antemano por tu ayuda.


Solución

hilos relacionados: 1 2

Aquí está la solución que estoy utilizando:

:conditions => ['LOWER(family_name) LIKE ? OR LOWER(given_name) LIKE ?', "%#{params[:search].downcase}%", "%#{params[:search].downcase}%"] 

Respuesta

11

LIKE es un operador de mayúsculas y minúsculas en Postgres. Para la coincidencia de patrones insensible a mayúsculas/minúsculas, use ILIKE o other standard methods.

+0

La consulta de mayúsculas y minúsculas nunca se me pasó por la cabeza. Muchas gracias. Terminé configurando todo en minúsculas en la consulta porque es compatible con ambos tipos de bases de datos. Editar: Se agregó el código final a la pregunta. – studiofellow

Cuestiones relacionadas