PostgreSQL admite matrices SQL estándar y el any op (...)
sintaxis:
Eso significa que puede construir SQL como este:
where name ilike any (array['%Richard%', '%Feynman%'])
Eso es bueno y sucinto, entonces, ¿cómo hacemos que Rails construya esto? Eso es bastante fácil:
Model.where('name ilike any (array[?])', names.map { |s| "%#{s}%" })
No se necesitan comillas manuales, ActiveRecord convertirá la matriz en una lista con comillas/escapados correctamente cuando llene el ?
marcador de posición en.
Ahora solo tienes que construir los names
formación. Algo simple como esto debería hacer:
fields = params.keys.select { |k| k.to_s =~ /\Afield\d+\z/ }
names = params.values_at(*fields).select(&:present)
También puede convertir un único 'a b'
entradas en 'a', 'b'
lanzando un split
y flatten
en la mezcla:
names = params.values_at(*fields)
.select(&:present)
.map(&:split)
.flatten