sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Enviando una matriz de valores a una consulta sql en ruby?

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