yml rails postgres conectar con ruby-on-rails ruby postgresql order case-insensitive

ruby on rails - conectar - Cómo hacer un orden insensible a mayúsculas/minúsculas en Rails con postgresql



conectar ruby on rails con postgresql (5)

¿Ha considerado almacenar su columna como tipo de texto? Realmente solo internaliza la llamada a lower () tal como lo entiendo. Sería automático para usted después. Si hay ocasiones en que necesita una búsqueda sensible a mayúsculas y minúsculas, esta puede no ser la mejor idea.

Estoy en el proceso de cambiar mi entorno de desarrollo de sqlite3 a postgresql 8.4 y tengo un último obstáculo.

En mi original, tenía la siguiente línea en un método de ayuda;

result = Users.find(:all, :order => "name collate NOCASE")

que proporcionó una muy buena búsqueda insensible a mayúsculas y minúsculas. No puedo replicar esto para postgresql. Debería ser fácil, ¿alguna idea?

Gracias.


Ahora con Rails 5.2 probablemente recibirá una advertencia si usa la respuesta aceptada.

ADVERTENCIA DE DEPRESIÓN: método de consulta peligroso (método cuyos argumentos se usan como SQL sin procesar) llamado con argumento (s) sin atributo (s): "BAJO (?) ASC".

Una alternativa podría ser confiar en Arel (se fusionó ahora en Rails):

results = User.order(User.arel_table[''name''].lower.asc) # results.to_sql == "SELECT /"users/".* FROM /"users/" ORDER BY LOWER(/"users/"./"name/") ASC"


EN SQL puede usar ORDER BY LOWER (nombre de columna), no tiene idea de cómo hacerlo en Ruby. Un índice funcional (también en LOWER (nombre de columna)) ayudará a acelerar las cosas.


La respuesta popular de LanecH adaptada para Rails 3+ (incluido Rails 4):

users = User.order(''LOWER(name)'') # or create a named scope you can reuse class User < ActiveRecord::Base scope :order_by_name, -> { order(''LOWER(name)'') } end users = User.order_by_name


result = Users.find(:all, :order => "LOWER(name)")

Para tomar un poco de Brad y Frank.