rails ruby-on-rails activerecord arel

ruby on rails - rails - Búsqueda no sensible a mayúsculas/minúsculas con registro activo



arel ruby on rails (1)

Aquí hay un par de opciones para ti.

En primer lugar, LIKE ya no distingue entre mayúsculas y minúsculas, pero para Postgres deberá usar ILIKE para que sus búsquedas no distingan entre mayúsculas y minúsculas.

Customer.where(''firstname LIKE ?'', "%john%").first.name => ''John''

En segundo lugar, si desea comparar el uso de la insensibilidad a mayúsculas y minúsculas con comparaciones que no coinciden con los patrones, como <>, =, <=, etc., entonces puede usar el comando COLLATE para imponer las coincidencias insensibles a mayúsculas y minúsculas:

Customer.where(''firstname COLLATE utf8_unicode_ci = ?'', ''john'').first.name => ''John''

Parece que Postgres todavía no tiene un comando COLLATE , pero aquí puede ver más sobre las opciones de búsqueda que no distinguen entre mayúsculas y minúsculas. En general, cuando desee realizar una coincidencia de patrones o consultas complejas, no podrá hacerlo de forma independiente de la base de datos. Mi recomendación es usar un solo sistema de base de datos tanto en desarrollo como en producción. Esto garantiza que sus consultas también se comporten de la misma manera en ambos entornos, lo que debería generar menos errores. Si encuentra la necesidad de admitir múltiples sistemas de bases de datos, su mejor opción es simplemente crear dos consultas diferentes: una para ejecutar en MySQL y otra para ejecutar en Postgres, por ejemplo.

Yo uso los rieles 3.0.4

Aquí hay un fragmento de la consulta Arel en mi aplicación Rails: ¿cómo puedo usar el método upcase para hacer una búsqueda que no distinga entre mayúsculas y minúsculas en una base de datos de manera independiente?

Customer.where("company_id = ? and (firstname like ? or lastname like ? or reference like ?)", current_user.company_id, "%#{params[:query]}%", "%#{params[:query]}%", "%#{params[:query]}%")

Gracias